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)
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 })
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)
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)
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
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 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
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
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)
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"
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
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')
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 })