Ejemplo n.º 1
0
def insert_transfer_template(delivery_note, frappe_client):
	delivery_trip = frappe.get_doc("Delivery Trip", delivery_note.lr_no)
	estimated_arrival = ''
	for stop in delivery_trip.delivery_stops:
		if stop.delivery_note == delivery_note.name:
			estimated_arrival = stop.estimated_arrival

	transfer_template_packages = []
	for item in delivery_note.items:
		if item.package_tag:
			transfer_template_packages.append({
				"package_tag": item.package_tag,
				"wholesale_price": item.rate
			})

	site_url = get_host_name()
	transfer_template = {
		"doctype": "Transfer Template",
		"bloomstack_company": delivery_note.company,
		"delivery_note": delivery_note.name,
		"transporter_facility_license": frappe.db.get_value("Company", delivery_note.company, "license"),
		"transporter_phone": frappe.db.get_value("Company", delivery_note.company, "phone_no"),
		"recipient_license_number": delivery_note.license,
		"vechile_make": frappe.db.get_value("Vehicle", delivery_note.vehicle_no, "make"),
		"vehicle_model": frappe.db.get_value("Vehicle", delivery_note.vehicle_no, "model"),
		"vehicle_license_plate_number": delivery_note.vehicle_no,
		"driver_name": delivery_note.driver_name,
		"driver_license_number": frappe.db.get_value("Driver", delivery_note.driver, "license_number"),
		"estimated_departure": delivery_trip.departure_time,
		"estimated_arrival": estimated_arrival,
		"packages": transfer_template_packages
	}
	frappe_client.insert(transfer_template)
Ejemplo n.º 2
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 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
    })
Ejemplo n.º 4
0
def insert_transfer_template(delivery_note, frappe_client):
    estimated_arrival = delivery_note.estimated_arrival
    departure_time = delivery_note.departure_time

    if delivery_note.lr_no:
        delivery_trip = frappe.get_doc("Delivery Trip", delivery_note.lr_no)
        for stop in delivery_trip.delivery_stops:
            if stop.delivery_note == delivery_note.name:
                estimated_arrival = stop.estimated_arrival

        if not estimated_arrival:
            try:
                delivery_trip.process_route(False)
            except Exception:
                frappe.throw(_("Estimated Arrival Times are not present."))

        if not departure_time:
            departure_time = delivery_trip.departure_time

    transfer_template_packages = []
    for item in delivery_note.items:
        if item.package_tag:
            transfer_template_packages.append({
                "package_tag": item.package_tag,
                "wholesale_price": item.amount
            })

    site_url = get_host_name()
    transfer_template = {
        "doctype":
        "Transfer Template",
        "bloomstack_company":
        delivery_note.company,
        "delivery_note":
        delivery_note.name,
        "transporter_facility_license":
        frappe.db.get_value("Company", delivery_note.company, "license"),
        "transporter_phone":
        frappe.db.get_value("Company", delivery_note.company, "phone_no"),
        "recipient_license_number":
        delivery_note.license,
        "vechile_make":
        frappe.db.get_value("Vehicle", delivery_note.vehicle_no, "make"),
        "vehicle_model":
        frappe.db.get_value("Vehicle", delivery_note.vehicle_no, "model"),
        "vehicle_license_plate_number":
        delivery_note.vehicle_no,
        "driver_name":
        delivery_note.driver_name,
        "driver_license_number":
        frappe.db.get_value("Driver", delivery_note.driver, "license_number"),
        "estimated_departure":
        departure_time,
        "estimated_arrival":
        estimated_arrival,
        "packages":
        transfer_template_packages
    }
    frappe_client.insert(transfer_template)
Ejemplo n.º 5
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)
Ejemplo n.º 6
0
def make_compliance_item(item):
    bloomtrace_compliance_item_dict = {
        "doctype": "Compliance Item",
        "bloomstack_site": get_host_name(),
        "item_code": item.item_code,
        "item_name": item.item_name,
        "enable_metrc": item.enable_metrc,
        "metrc_id": item.metrc_id,
        "metrc_item_category": item.metrc_item_category,
        "metrc_unit_value": item.metrc_unit_value,
        "metrc_uom": item.metrc_uom,
        "metrc_unit_uom": item.metrc_unit_uom
    }
    return bloomtrace_compliance_item_dict
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
def make_package_tag(package_tag):
	site_url = get_host_name()
	item = frappe.db.get_value("Item", package_tag.item_code, "bloomtrace_id")
	manufacturing_date = frappe.db.get_value("Batch", package_tag.batch_no, "manufacturing_date") if package_tag.batch_no else None
	expiry_date = frappe.db.get_value("Batch", package_tag.batch_no, "expiry_date") if package_tag.batch_no else None

	bloomtrace_package_tag = {
		"doctype": "Package Tag",
		"bloomstack_site": site_url,
		"bloomstack_company": package_tag.bloomstack_company,
		"item": item,
		"uid_number": package_tag.name,
		"batch_number": package_tag.batch_no,
		"manufacturing_date": manufacturing_date,
		"expiry_date": expiry_date
	}
	return bloomtrace_package_tag
Ejemplo n.º 9
0
def send_init_sync(doc,support_user):
    if frappe.session.user == "Guest":
        return
    url = frappe.get_value("ISupport Settings",None,"support_url")
    if not url:
        return
    url = str(url) + "/api/method/usupport.sync.receive_init"
    user_name = frappe.get_value("User",doc.user,"full_name")
    data = {
        "name":  doc.room,
        "is_chat": 1,
        "subject": "Chat {} {}".format(user_name, doc.room),
        "priority": "Medium",
        "versions": get_version(),
        "url": get_host_name(),
        "issue_type": "Chat Support",
        "owner_user": doc.user,
        "owner_user_name": user_name,
        "issue_date": today(),
        "support_user":support_user,
    }
    for i in range(3):
        try:
            r = requests.post(url, data=json.dumps(data), timeout=5)
            r.raise_for_status()
            frappe.logger().debug({"webhook_success": r.text})
            support_code = json.loads(r.text)["message"]
            # print_out(support_code)
            room_doc = frappe.get_doc({
                "doctype": "Chat Room Support Code",
                "room": doc.room,
                "support_code": support_code,
            })
            room_doc.flags.ignore_permissions = True
            room_doc.save()
            send_message(doc,support_code)
            break
        except Exception as e:
            frappe.logger().debug({"webhook_error": e, "try": i + 1})
            sleep(3 * i + 1)
            if i != 2:
                continue
            else:
                raise e
Ejemplo n.º 10
0
def invoice_submission(doc=None, method=None, fees_name=None):
    if not doc and fees_name:
        doc = frappe.get_doc("Fees", fees_name)
    send_fee_details_to_bank = frappe.get_value("Company", doc.company, "send_fee_details_to_bank") or 0
    if not send_fee_details_to_bank:
        return
    series = frappe.get_value("Company", doc.company, "nmb_series") or ""
    abbr = frappe.get_value("Company", doc.company, "abbr") or ""
    if not series:
        frappe.throw(_("Please set NMB User Series in Company {0}".format(doc.company)))
    data = {
    "reference" : doc.bank_reference,
    "student_name" : doc.student_name, 
    "student_id" :  doc.student,
    "amount" : doc.grand_total,
    "type" : "Fees Invoice",
    "code" : 10,
    "allow_partial" :"FALSE",
    "callback_url" : "https://" + get_host_name() + "/api/method/csf_tz.bank_api.receive_callback?token=" + doc.callback_token,
    }
    send_nmb("invoice_submission", data, doc.company)
Ejemplo n.º 11
0
def receive_validate_reference(*args, **kwargs):
    r = frappe.request
    # uri = url_fix(r.url.replace("+"," "))
    # http_method = r.method
    body = r.get_data()
    # headers = r.headers
    message = {}
    if body:
        data = body.decode("utf-8")
        msgs = ToObject(data)
        atr_list = list(msgs.__dict__)
        for atr in atr_list:
            if getattr(msgs, atr):
                message[atr] = getattr(msgs, atr)
    else:
        frappe.throw("This has no body!")

    doc_info = get_fee_info(message["reference"])
    if doc_info["name"]:
        doc = frappe.get_doc(doc_info["doctype"], doc_info["name"])
        response = dict(
            status=1,
            reference=doc.bank_reference,
            student_name=doc.student_name,
            student_id=doc.student,
            amount=doc.grand_total,
            type="Fees Invoice",
            code=10,
            allow_partial="FALSE",
            callback_url="https://" + get_host_name() +
            "/api/method/csf_tz.bank_api.receive_callback?token=" +
            doc.callback_token,
            token=message["token"],
        )
        return response
    else:
        frappe.response["status"] = 0
        frappe.response["description"] = "Not Exist"
Ejemplo n.º 12
0
	def send_init_sync(self):
		if frappe.session.user == "Guest":
			return
		if self.support_code:
			return
		url = frappe.get_value("ISupport Settings",None,"support_url")
		if not url:
			return
		url = str(url) + "/api/method/usupport.sync.receive_init"
		data = {
			"name": self.name,
			"subject": self.subject,
			"priority": self.priority,
			"versions": self.versions,
			"url": get_host_name(),
			"issue_type": self.issue_type,
			"owner_user": self.owner_user,
			"owner_user_name": self.owner_user_name,
			"issue_date": self.issue_date,
		}
		for i in range(3):
			try:
				r = requests.post(url, data=json.dumps(data), timeout=5)
				r.raise_for_status()
				frappe.logger().debug({"webhook_success": r.text})
				self.support_code = json.loads(r.text)["message"]
				self.need_sync = 0
				self.last_sync = now()
				break
			except Exception as e:
				frappe.logger().debug({"webhook_error": e, "try": i + 1})
				sleep(3 * i + 1)
				if i != 2:
					continue
				else:
					raise e
Ejemplo n.º 13
0
def create_bloomtrace_license(compliance_info, method):
    frappe_client = get_bloomtrace_client()
    if not frappe_client:
        return
    site_url = get_host_name()

    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, site_url,
                                     compliance_info.license_number, 'Active')
Ejemplo n.º 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
        })