Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

175 wiersze
4.7 KiB

  1. import click
  2. import frappe
  3. from frappe import _
  4. from frappe.custom.doctype.custom_field.custom_field import \
  5. create_custom_fields
  6. def get_payment_gateway_controller(payment_gateway):
  7. """Return payment gateway controller"""
  8. gateway = frappe.get_doc("Payment Gateway", payment_gateway)
  9. if gateway.gateway_controller is None:
  10. try:
  11. return frappe.get_doc(f"{payment_gateway} Settings")
  12. except Exception:
  13. frappe.throw(_("{0} Settings not found").format(payment_gateway))
  14. else:
  15. try:
  16. return frappe.get_doc(gateway.gateway_settings, gateway.gateway_controller)
  17. except Exception:
  18. frappe.throw(_("{0} Settings not found").format(payment_gateway))
  19. @frappe.whitelist(allow_guest=True, xss_safe=True)
  20. def get_checkout_url(**kwargs):
  21. try:
  22. if kwargs.get("payment_gateway"):
  23. doc = frappe.get_doc("{} Settings".format(kwargs.get("payment_gateway")))
  24. return doc.get_payment_url(**kwargs)
  25. else:
  26. raise Exception
  27. except Exception:
  28. frappe.respond_as_web_page(
  29. _("Something went wrong"),
  30. _(
  31. "Looks like something is wrong with this site's payment gateway configuration. No payment has been made."
  32. ),
  33. indicator_color="red",
  34. http_status_code=frappe.ValidationError.http_status_code,
  35. )
  36. def create_payment_gateway(gateway, settings=None, controller=None):
  37. # NOTE: we don't translate Payment Gateway name because it is an internal doctype
  38. if not frappe.db.exists("Payment Gateway", gateway):
  39. payment_gateway = frappe.get_doc(
  40. {
  41. "doctype": "Payment Gateway",
  42. "gateway": gateway,
  43. "gateway_settings": settings,
  44. "gateway_controller": controller,
  45. }
  46. )
  47. payment_gateway.insert(ignore_permissions=True)
  48. def make_custom_fields():
  49. if not frappe.get_meta("Web Form").has_field("payments_tab"):
  50. click.secho("* Installing Payment Custom Fields in Web Form")
  51. create_custom_fields(
  52. {
  53. "Web Form": [
  54. {
  55. "fieldname": "payments_tab",
  56. "fieldtype": "Tab Break",
  57. "label": "Payments",
  58. "insert_after": "custom_css",
  59. },
  60. {
  61. "default": "0",
  62. "fieldname": "accept_payment",
  63. "fieldtype": "Check",
  64. "label": "Accept Payment",
  65. "insert_after": "payments",
  66. },
  67. {
  68. "depends_on": "accept_payment",
  69. "fieldname": "payment_gateway",
  70. "fieldtype": "Link",
  71. "label": "Payment Gateway",
  72. "options": "Payment Gateway",
  73. "insert_after": "accept_payment",
  74. },
  75. {
  76. "default": "Buy Now",
  77. "depends_on": "accept_payment",
  78. "fieldname": "payment_button_label",
  79. "fieldtype": "Data",
  80. "label": "Button Label",
  81. "insert_after": "payment_gateway",
  82. },
  83. {
  84. "depends_on": "accept_payment",
  85. "fieldname": "payment_button_help",
  86. "fieldtype": "Text",
  87. "label": "Button Help",
  88. "insert_after": "payment_button_label",
  89. },
  90. {
  91. "fieldname": "payments_cb",
  92. "fieldtype": "Column Break",
  93. "insert_after": "payment_button_help",
  94. },
  95. {
  96. "default": "0",
  97. "depends_on": "accept_payment",
  98. "fieldname": "amount_based_on_field",
  99. "fieldtype": "Check",
  100. "label": "Amount Based On Field",
  101. "insert_after": "payments_cb",
  102. },
  103. {
  104. "depends_on": "eval:doc.accept_payment && doc.amount_based_on_field",
  105. "fieldname": "amount_field",
  106. "fieldtype": "Select",
  107. "label": "Amount Field",
  108. "insert_after": "amount_based_on_field",
  109. },
  110. {
  111. "depends_on": "eval:doc.accept_payment && !doc.amount_based_on_field",
  112. "fieldname": "amount",
  113. "fieldtype": "Currency",
  114. "label": "Amount",
  115. "insert_after": "amount_field",
  116. },
  117. {
  118. "depends_on": "accept_payment",
  119. "fieldname": "currency",
  120. "fieldtype": "Link",
  121. "label": "Currency",
  122. "options": "Currency",
  123. "insert_after": "amount",
  124. },
  125. ]
  126. }
  127. )
  128. frappe.clear_cache(doctype="Web Form")
  129. def delete_custom_fields():
  130. if frappe.get_meta("Web Form").has_field("payments_tab"):
  131. click.secho("* Uninstalling Payment Custom Fields from Web Form")
  132. fieldnames = (
  133. "payments_tab",
  134. "accept_payment",
  135. "payment_gateway",
  136. "payment_button_label",
  137. "payment_button_help",
  138. "payments_cb",
  139. "amount_field",
  140. "amount_based_on_field",
  141. "amount",
  142. "currency",
  143. )
  144. for fieldname in fieldnames:
  145. frappe.db.delete("Custom Field", {"name": "Web Form-" + fieldname})
  146. frappe.clear_cache(doctype="Web Form")
  147. def before_install():
  148. # TODO: remove this
  149. # This is done for erpnext CI patch test
  150. #
  151. # Since we follow a flow like install v14 -> restore v10 site
  152. # -> migrate to v12, v13 and then v14 again
  153. #
  154. # This app fails installing when the site is restored to v10 as
  155. # a lot of apis don;t exist in v10 and this is a (at the moment) required app for erpnext.
  156. if not frappe.get_meta("Module Def").has_field("custom"):
  157. return False