Exemplo n.º 1
0
    def setup_subscription(self):
        non_profit_settings = frappe.get_doc('Non Profit Settings')
        if not non_profit_settings.enable_razorpay_for_memberships:
            frappe.throw(
                'Please check Enable Razorpay for Memberships in {0} to setup subscription'
            ).format(
                get_link_to_form('Non Profit Settings', 'Non Profit Settings'))

        controller = get_payment_gateway_controller("Razorpay")
        settings = controller.get_settings({})

        plan_id = frappe.get_value("Membership Type", self.membership_type,
                                   "razorpay_plan_id")

        if not plan_id:
            frappe.throw(_("Please setup Razorpay Plan ID"))

        subscription_details = {
            "plan_id": plan_id,
            "billing_frequency": cint(non_profit_settings.billing_frequency),
            "customer_notify": 1
        }

        args = {'subscription_details': subscription_details}

        subscription = controller.setup_subscription(settings, **args)

        return subscription
Exemplo n.º 2
0
def paypal():
    try:
        controller = get_payment_gateway_controller("PayPal")
        controller().validate_transaction_currency("USD")

        payment_details = {
            "amount": 600,
            "title": "Payment for bill : 111",
            "description": "payment via cart",
            "reference_doctype": "Payment Request",
            "reference_docname": "PR0001",
            "payer_email": "*****@*****.**",
            "payer_name": "Nuran Verkleij",
            "order_id": "111",
            "currency": "USD",
            "payment_gateway": "Paypal",
            "subscription_details": {
                "plan_id": "plan_12313",  # if Required
                "start_date": "2018-08-30",
                "billing_period":
                "Month",  # (Day, Week, SemiMonth, Month, Year),
                "billing_frequency": 1,
                "customer_notify": 1,
                "upfront_amount": 1000
            }
        }

        url = controller().get_payment_url(**payment_details)

        print(url)
    except Exception as e:
        print(frappe.get_traceback())
Exemplo n.º 3
0
    def setup_subscription(self):
        membership_settings = frappe.get_doc("Membership Settings")
        if not membership_settings.enable_razorpay:
            frappe.throw("Please enable Razorpay to setup subscription")

        controller = get_payment_gateway_controller("Razorpay")
        settings = controller.get_settings({})

        plan_id = frappe.get_value("Membership Type", self.membership_type,
                                   "razorpay_plan_id")

        if not plan_id:
            frappe.throw(_("Please setup Razorpay Plan ID"))

        subscription_details = {
            "plan_id": plan_id,
            "billing_frequency": cint(membership_settings.billing_frequency),
            "customer_notify": 1
        }

        args = {'subscription_details': subscription_details}

        subscription = controller.setup_subscription(settings, **args)

        return subscription
Exemplo n.º 4
0
    def get_payment_url(self):
        if self.reference_doctype != "Fees":
            data = frappe.db.get_value(self.reference_doctype,
                                       self.reference_name,
                                       ["company", "customer_name"],
                                       as_dict=1)
        else:
            data = frappe.db.get_value(self.reference_doctype,
                                       self.reference_name, ["student_name"],
                                       as_dict=1)
            data.update({"company": frappe.defaults.get_defaults().company})

        controller = get_payment_gateway_controller(self.payment_gateway)
        controller.validate_transaction_currency(self.currency)

        if hasattr(controller, 'validate_minimum_transaction_amount'):
            controller.validate_minimum_transaction_amount(
                self.currency, self.grand_total)

        return controller.get_payment_url(
            **{
                "amount": flt(self.grand_total, self.precision("grand_total")),
                "title": data.company.encode("utf-8"),
                "description": self.subject.encode("utf-8"),
                "reference_doctype": "Payment Request",
                "reference_docname": self.name,
                "payer_email": self.email_to or frappe.session.user,
                "payer_name": frappe.safe_encode(data.customer_name),
                "order_id": self.name,
                "currency": self.currency
            })
Exemplo n.º 5
0
def get_gateways(context="{}", is_backend=0):
    """Gets a list of gateways that can be selected and their embedding information"""

    context = json.loads(context)
    context['is_backend'] = is_backend
    gateway_selector = get_payment_gateway_controller("Gateway Selector")
    gateways = []
    for gateway in gateway_selector.gateways:
        if is_gateway_available(gateway.service,
                                context,
                                is_backend=is_backend):
            payload = {
                "name": gateway.service.replace(' ', '_').lower(),
                "data": {
                    key: gateway.get(key)
                    for key in ['label', 'icon', 'service', 'is_default']
                },
                "is_embedable": is_gateway_embedable(gateway.service)
            }

            if payload["is_embedable"]:
                payload["embed_form"] = get_gateway_embed_form(gateway.service,
                                                               context=context)

            gateways.append(payload)

    return gateways
Exemplo n.º 6
0
    def on_submit(self):
        if self.payment_request_type == 'Outward':
            self.db_set('status', 'Initiated')
            return
        elif self.payment_request_type == 'Inward':
            self.db_set('status', 'Requested')

        send_mail = self.payment_gateway_validation(
        ) if self.payment_gateway else None
        ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)

        if (hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart") \
         or self.flags.mute_email:
            send_mail = False

        if send_mail and self.payment_channel != "Phone":
            self.set_payment_request_url()
            self.send_email()
            self.make_communication_entry()

        elif self.payment_channel == "Phone":
            controller = get_payment_gateway_controller(self.payment_gateway)
            payment_record = dict(reference_doctype="Payment Request",
                                  reference_docname=self.name,
                                  payment_reference=self.reference_name,
                                  grand_total=self.grand_total,
                                  sender=self.email_to,
                                  currency=self.currency,
                                  payment_gateway=self.payment_gateway)
            controller.validate_transaction_currency(self.currency)
            controller.request_for_payment(**payment_record)
Exemplo n.º 7
0
	def get_payment_gateway_url(self, doc):
		if self.accept_payment:
			controller = get_payment_gateway_controller(self.payment_gateway)

			title = "Payment for {0} {1}".format(doc.doctype, doc.name)
			amount = self.amount
			if self.amount_based_on_field:
				amount = doc.get(self.amount_field)

			from decimal import Decimal
			if amount is None or Decimal(amount) <= 0:
				return frappe.utils.get_url(self.success_url or self.route)
				
			payment_details = {
				"amount": amount,
				"title": title,
				"description": title,
				"reference_doctype": doc.doctype,
				"reference_docname": doc.name,
				"payer_email": frappe.session.user,
				"payer_name": frappe.utils.get_fullname(frappe.session.user),
				"order_id": doc.name,
				"currency": self.currency,
				"redirect_to": frappe.utils.get_url(self.success_url or self.route)
			}

			# Redirect the user to this url
			return controller.get_payment_url(**payment_details)
Exemplo n.º 8
0
def get_url_from_gateway(gateway, data):
    """Gets the gateway url when deferring gateways that can not be embeded"""

    if isinstance(data, unicode) or isinstance(data, str):
        data = json.loads(data)

    gateway_selector = get_payment_gateway_controller("Gateway Selector")

    for g in gateway_selector.gateways:
        if g.service.replace(' ', '_').lower() == gateway:
            gateway_name = g.service
            break
    else:
        gateway_name = None

    controller = get_payment_gateway_controller(gateway_name)

    return controller.get_payment_url(**data)
Exemplo n.º 9
0
 def payment_gateway_validation(self):
     try:
         controller = get_payment_gateway_controller(self.payment_gateway)
         if hasattr(controller, 'on_payment_request_submission'):
             return controller.on_payment_request_submission(self)
         else:
             return True
     except Exception:
         return False
Exemplo n.º 10
0
	def payment_gateway_validation(self):
		try:
			controller = get_payment_gateway_controller(self.payment_gateway)
			if hasattr(controller, 'on_payment_request_submission'):
				return controller.on_payment_request_submission(self)
			else:
				return True
		except Exception:
			return False
Exemplo n.º 11
0
	def __init__(self):
		self.successful_transaction = []
		self.failed_transaction = []
		self.plans = get_all_plans()
		self.today = getdate()
		self.next = add_months(getdate(), 1)
		self.enabled = frappe.db.get_single_value("Membership Settings", 'enable_e_mandate_payments')
		self.controller = get_payment_gateway_controller("Razorpay")
		self.controller.init_client()
		if self.controller.client:
			self.client = self.controller.client
		else:
			frappe.throw("Razorpay Not Setup")
Exemplo n.º 12
0
    def request_phone_payment(self):
        controller = get_payment_gateway_controller(self.payment_gateway)
        request_amount = self.get_request_amount()

        payment_record = dict(reference_doctype="Payment Request",
                              reference_docname=self.name,
                              payment_reference=self.reference_name,
                              request_amount=request_amount,
                              sender=self.email_to,
                              currency=self.currency,
                              payment_gateway=self.payment_gateway)

        controller.validate_transaction_currency(self.currency)
        controller.request_for_payment(**payment_record)
Exemplo n.º 13
0
	def get_payment_url(self):
		data = frappe.db.get_value(self.reference_doctype, self.reference_name,
			["company", "customer_name"], as_dict=1)

		controller = get_payment_gateway_controller(self.payment_gateway)
		controller.validate_transaction_currency(self.currency)

		return controller.get_payment_url(**{
			"amount": flt(self.grand_total, self.precision("grand_total")),
			"title": data.company.encode("utf-8"),
			"description": self.subject.encode("utf-8"),
			"reference_doctype": "Payment Request",
			"reference_docname": self.name,
			"payer_email": self.email_to or frappe.session.user,
			"payer_name": data.customer_name,
			"order_id": self.name,
			"currency": self.currency
		})
Exemplo n.º 14
0
	def get_payment_url(self):
		data = frappe.db.get_value(self.reference_doctype, self.reference_name,
			["company", "customer_name"], as_dict=1)

		controller = get_payment_gateway_controller(self.payment_gateway)
		controller.validate_transaction_currency(self.currency)

		return controller.get_payment_url(**{
			"amount": flt(self.grand_total, self.precision("grand_total")),
			"title": data.company,
			"description": self.subject,
			"reference_doctype": "Payment Request",
			"reference_docname": self.name,
			"payer_email": self.email_to or frappe.session.user,
			"payer_name": data.customer_name,
			"order_id": self.name,
			"currency": self.currency
		})
Exemplo n.º 15
0
    def get_razorpay_order(self):
        controller = get_payment_gateway_controller("Razorpay")

        title = "Ticekt Payment for {0}".format(self.name)
        payment_details = {
            "amount": 300,
            "currency": "INR",
            "title": title,
            "description": title,
            "reference_doctype": "Conference Participant",
            "reference_docname": self.name,
            "payer_email": frappe.session.user,
            "payer_name": self.full_name,
            "order_id": self.name,
            "payment_capture": 1,
            "receipt": self.name
        }

        return controller.create_order(**payment_details)
Exemplo n.º 16
0
def register(args):
	try:
		args = json.loads(args)
		users, currency, billing_cycle, coupon, email = args['users'], args['currency'], args['billing_cycle'],args['coupon'],args['email']
		price_list = frappe.get_value("Price List", {"currency": currency, "selling": 1, "enabled": 1})

		billing_cycle_price = frappe.get_value("Item Price",{"item_code": billing_cycle, "currency":currency, "selling": 1},"price_list_rate")
		# add_on_price = 0 if add_ons == "0" else frappe.get_value("Item Price",{"item_code": add_ons, "currency":currency, "selling": 1},"price_list_rate")

		total_cost = (billing_cycle_price * cint(users))
		discount = 0

		if coupon:
			total_cost, discount = apply_code(coupon, total_cost, currency) 

		customer, customer_email = frappe.get_value("Customer", {"email": email }, ["name", "email"])
		frappe.db.set_value("Customer", customer, "users", users)
		frappe.db.commit()
		
		sales_order = make_sales_order(customer,currency, price_list, discount, users, billing_cycle, coupon)
		

		si = make_sales_invoice(sales_order.name,ignore_permissions=True)
		si.insert(ignore_permissions=True)
		si.submit()
		
		update_coupon_usage(coupon)

		payment_request = make_payment_request(dt="Sales Invoice", dn=si.name, submit_doc=True, mute_email=True, payment_gateway= payment_gateway_account[currency])
		
		payment_details = get_payment_details(payment_request ,si, customer,customer_email, currency)

		controller = get_payment_gateway_controller(payment_gateway[currency])
		url = controller.get_payment_url(**payment_details)
		return url
	except Exception as e:
		print(e)
		print(frappe.get_traceback())
Exemplo n.º 17
0
	def get_payment_gateway_url(self, doc):
		if self.accept_payment:
			controller = get_payment_gateway_controller(self.payment_gateway)

			title = "Payment for {0} {1}".format(doc.doctype, doc.name)
			amount = self.amount
			if self.amount_based_on_field:
				amount = doc.get(self.amount_field)
			payment_details = {
				"amount": amount,
				"title": title,
				"description": title,
				"reference_doctype": doc.doctype,
				"reference_docname": doc.name,
				"payer_email": frappe.session.user,
				"payer_name": frappe.utils.get_fullname(frappe.session.user),
				"order_id": doc.name,
				"currency": self.currency,
				"redirect_to": frappe.utils.get_url(self.route)
			}

			# Redirect the user to this url
			return controller.get_payment_url(**payment_details)
Exemplo n.º 18
0
	def get_payment_url(self):
		if self.reference_doctype != "Fees":
			data = frappe.db.get_value(self.reference_doctype, self.reference_name, ["company", "customer_name"], as_dict=1)
		else:
			data = frappe.db.get_value(self.reference_doctype, self.reference_name, ["student_name"], as_dict=1)
			data.update({"company": frappe.defaults.get_defaults().company})

		controller = get_payment_gateway_controller(self.payment_gateway)
		controller.validate_transaction_currency(self.currency)

		if hasattr(controller, 'validate_minimum_transaction_amount'):
			controller.validate_minimum_transaction_amount(self.currency, self.grand_total)

		return controller.get_payment_url(**{
			"amount": flt(self.grand_total, self.precision("grand_total")),
			"title": data.company.encode("utf-8"),
			"description": self.subject.encode("utf-8"),
			"reference_doctype": "Payment Request",
			"reference_docname": self.name,
			"payer_email": self.email_to or frappe.session.user,
			"payer_name": frappe.safe_encode(data.customer_name),
			"order_id": self.name,
			"currency": self.currency
		})
Exemplo n.º 19
0
def get_plans_for_membership(*args, **kwargs):
	controller = get_payment_gateway_controller("Razorpay")
	plans = controller.get_plans()
	return [plan.get("item") for plan in plans.get("items")]
Exemplo n.º 20
0
def get_gateway_embed_form(name, context={}):
    """Gets the gateway's embedable form information"""

    controller = get_payment_gateway_controller(name)
    return controller.get_embed_form(context=context)
Exemplo n.º 21
0
def is_gateway_embedable(name):
    """Returns True if the the gateway supports get_embed_form api"""

    controller = get_payment_gateway_controller(name)
    return hasattr(controller, "is_embedable") and controller.is_embedable
Exemplo n.º 22
0
def is_gateway_available(name, context, is_backend=0):
    controller = get_payment_gateway_controller(name)
    if hasattr(controller, "is_available"):
        return controller.is_available(context, is_backend=is_backend)

    return True
Exemplo n.º 23
0
Arquivo: api.py Projeto: frappe/iff
def get_client():
    controller = get_payment_gateway_controller("Razorpay")
    controller.init_client()
    return controller.client