def confirm_payment(token):
	paypal_express_payment = frappe.get_doc("Paypal Express Payment", token)

	params = get_paypal_params()
	params.update({
		"METHOD": "DoExpressCheckoutPayment",
		"PAYERID": paypal_express_payment.payerid,
		"TOKEN": paypal_express_payment.token,
		"PAYMENTREQUEST_0_PAYMENTACTION": "SALE",
		"PAYMENTREQUEST_0_AMT": paypal_express_payment.amount,
		"PAYMENTREQUEST_0_CURRENCYCODE": paypal_express_payment.currency
	})

	try:
		get_api_response(params)

		paypal_express_payment = frappe.get_doc("Paypal Express Payment", token)
		paypal_express_payment.status = "Completed"
		paypal_express_payment.save(ignore_permissions=True)
				
		if paypal_express_payment.reference_doctype and paypal_express_payment.reference_docname:
			frappe.get_doc(paypal_express_payment.reference_doctype, 
				paypal_express_payment.reference_docname).run_method("set_paid")
		
		frappe.db.commit()

		frappe.local.response["type"] = "redirect"
		frappe.local.response["location"] = get_url("/paypal-express-success")
		
	except PaypalException:
		frappe.local.response["type"] = "redirect"
		frappe.local.response["location"] = get_url("/paypal-express-cancel")
def get_activities():
	from frappe.utils import get_url, cstr
	frappe.errprint(get_url())
	frappe.errprint("in activities")
	if get_url()=='http://tailorpad.com':
		frappe.errprint("in the get_activities")
		dbname=frappe.db.sql("""select site_name from `tabSubAdmin Info` where active=1""",as_dict=1)
		frappe.errprint("dbname")
		lst=[]
		qry_srt='select feed_type,subject,site_name,creation from('
		for key in dbname:
			frappe.errprint("key")
			temp =key['site_name']
			if temp.find('.')!= -1:
				temp1=temp.split('.')[0][:16]
		 	else:
				temp1=temp[:16]
			qry="SELECT subject,creation,feed_type,'%s' as site_name FROM "%(temp)
			if temp :
				qry+=temp1+'.tabFeed'
				lst.append(qry)
		fin_qry=' UNION '.join(lst)
		frappe.errprint("fin qry")
		qry=qry_srt+fin_qry+" where doc_name='Administrator')foo ORDER BY creation desc limit 10"
		frappe.errprint(qry)
		act_details=frappe.db.sql(fin_qry,as_dict=1)
		frappe.errprint(act_details)
		if act_details:
			 frappe.errprint(act_details)
			 return act_details
		else:
			 return ' '
def get_activities():
	from frappe.utils import get_url, cstr
	frappe.errprint(get_url())
	frappe.errprint("in activities")
	if get_url()=='http://stich1.tailorpad.com':
		frappe.errprint("in the get_activities")
		dbname=frappe.db.sql("""select site_name from `tabSubAdmin Info` where active=1""",as_dict=1)
		frappe.errprint("dbname")
		lst=[]
		#qry_srt='select feed_type,subject,site_name,creation from('
		qry_srt="""SELECT CASE WHEN feed_type='Login' THEN concat('Administrator logged in at ', substring(creation,1,19),' in site "',site_name,'"') ELSE concat('Administrator updated the form "',doc_type,'" name "',doc_name,'" at ' , substring(creation,1,19),' in site "',site_name,'"') END as `ss` from("""
		for key in dbname:
			frappe.errprint("key")
			temp =key['site_name']
			if temp.find('.')!= -1:
				temp1=temp.split('.')[0][:16]
		 	else:
				temp1=temp[:16]
			#qry="SELECT subject,creation,feed_type,'%s' as site_name FROM "%(temp)
			qry="SELECT doc_name,doc_type,creation,feed_type,'%s' as site_name FROM "%(temp)
			if temp :
				qry+=temp1+'.tabFeed'
				lst.append(qry)
		fin_qry=' UNION '.join(lst)
		frappe.errprint("fin qry")
		qry=qry_srt+fin_qry+" where doc_name='Administrator')foo ORDER BY creation desc limit 10"
		frappe.errprint(qry)
		act_details=frappe.db.sql(qry,as_dict=1)
		frappe.errprint(act_details)
		if act_details:
			 frappe.errprint(act_details)
			 return act_details
		else:
			 return ' '
Example #4
0
	def send_email(self):
		"""
			Sends the link to backup file located at erpnext/backups
		"""
		from frappe.email import sendmail, get_system_managers

		recipient_list = get_system_managers()
		db_backup_url = get_url(os.path.join('backups', os.path.basename(self.backup_path_db)))
		files_backup_url = get_url(os.path.join('backups', os.path.basename(self.backup_path_files)))

		msg = """Hello,

Your backups are ready to be downloaded.

1. [Click here to download the database backup](%(db_backup_url)s)
2. [Click here to download the files backup](%(files_backup_url)s)

This link will be valid for 24 hours. A new backup will be available for
download only after 24 hours.""" % {
			"db_backup_url": db_backup_url,
			"files_backup_url": files_backup_url
		}

		datetime_str = datetime.fromtimestamp(os.stat(self.backup_path_db).st_ctime)
		subject = datetime_str.strftime("%d/%m/%Y %H:%M:%S") + """ - Backup ready to be downloaded"""

		sendmail(recipients=recipient_list, msg=msg, subject=subject)
		return recipient_list
Example #5
0
def get_redirect_uri(doc, token, payerid):
	data = json.loads(doc.data)
	
	if data.get("subscription_details") or data.get("subscription_id"):
		return get_url("{0}.create_recurring_profile?token={1}&payerid={2}".format(api_path, token, payerid))
	else:
		return get_url("{0}.confirm_payment?token={1}".format(api_path, token))
Example #6
0
	def send_welcome_mail_to_user(self):
		from frappe.utils import random_string, get_url

		key = random_string(32)
		self.db_set("reset_password_key", key)
		link = get_url("/update-password?key=" + key)

		self.send_login_mail(_("Verify Your Account"), "templates/emails/new_user.html",
			{"link": link, "site_url": get_url()})
Example #7
0
	def send_welcome_mail(self):
		from frappe.utils import random_string, get_url

		key = random_string(32)
		self.db_set("reset_password_key", key)
		link = get_url("/update-password?key=" + key)
		from frappe.utils import get_url, cstr
		frappe.errprint(get_url())
		if get_url()=='http://tailorpad.com':
			self.send_login_mail2("Verify Your Account",link)
		else:
			self.send_login_mail("Verify Your Account", "templates/emails/new_user.html", {"link": link})
Example #8
0
def getEmergencyDetails(data):
	data = json.loads(data)
	from templates.pages.dashboard import get_user_details
	user_details = get_user_details(data.get('profile_id'))
	if user_details.get('error'):
		return user_details

	user_details['barcode'] = get_url() + user_details['barcode']

	if 'files' in user_details['user_image']:
		user_details['user_image'] = get_url() + user_details['user_image']

	return user_details
def execute_set_express_checkout(amount, currency):
	params = get_paypal_params()
	params.update({
		"METHOD": "SetExpressCheckout",
		"PAYMENTREQUEST_0_PAYMENTACTION": "SALE",
		"PAYMENTREQUEST_0_AMT": amount,
		"PAYMENTREQUEST_0_CURRENCYCODE": currency
	})

	return_url = get_url("/api/method/paypal_integration.express_checkout.get_express_checkout_details")

	params = urlencode(params) + \
		"&returnUrl={0}&cancelUrl={1}".format(return_url, get_url("/paypal-express-cancel"))

	return get_api_response(params.encode("utf-8"))
def trigger_ref_doc(paypal_express_payment, method):
	if paypal_express_payment.reference_doctype and paypal_express_payment.reference_docname:
		ref_doc = frappe.get_doc(paypal_express_payment.reference_doctype, 
			paypal_express_payment.reference_docname)
		ref_doc.run_method(method)
		
		if method != "set_as_cancelled":
			frappe.local.response["type"] = "redirect"
			if ref_doc.make_sales_invoice:
				success_url = ref_doc.get_payment_success_url()
				if success_url:
					frappe.local.response["location"] = get_url("/{0}".format(success_url))
				else:
					frappe.local.response["location"] = get_url("/order/{0}".format(ref_doc.reference_name))
			else:
				frappe.local.response["location"] = get_url("/paypal-express-success")
Example #11
0
	def validate(self):
		self._prev = frappe._dict({
			"contact_date": frappe.db.get_value("Lead", self.name, "contact_date") if \
				(not cint(self.get("__islocal"))) else None,
			"contact_by": frappe.db.get_value("Lead", self.name, "contact_by") if \
				(not cint(self.get("__islocal"))) else None,
		})

		self.set_status()

		if self.source == 'Campaign' and not self.campaign_name and session['user'] != 'Guest':
			frappe.throw(_("Campaign Name is required"))

		if self.email_id:
			if not validate_email_add(self.email_id):
				frappe.throw(_('{0} is not a valid email id').format(self.email_id))

			if self.email_id == self.lead_owner:
				# Lead Owner cannot be same as the Lead
				self.lead_owner = None
		from frappe.utils import get_url, cstr
		if self.get("__islocal") and get_url()=='http://tailorpad.com':
			frappe.errprint("creating site from lead")
			frappe.get_doc({
					"doctype": "Site Master",
					"client_name": self.company_name,
					"site_name":  self.company_name,
					"email_id__if_administrator": self.email_id,
					"country": self.country					
				}).insert()
Example #12
0
	def test_insert_many(self):
		from frappe.frappeclient import FrappeClient

		frappe.db.sql('delete from `tabToDo` where description like "Test API%"')
		frappe.db.commit()

		host = get_url()

		if not host.startswith('http'):
			host = 'http://' + host

		if not host.endswith(':8000'):
			host = host + ':8000'

		server = FrappeClient(host, "Administrator", "admin", verify=False)

		server.insert_many([
			{"doctype": "ToDo", "description": "Test API 1"},
			{"doctype": "ToDo", "description": "Test API 2"},
			{"doctype": "ToDo", "description": "Test API 3"},
		])

		self.assertTrue(frappe.db.get_value('ToDo', {'description': 'Test API 1'}))
		self.assertTrue(frappe.db.get_value('ToDo', {'description': 'Test API 2'}))
		self.assertTrue(frappe.db.get_value('ToDo', {'description': 'Test API 3'}))
Example #13
0
	def on_payment_authorized(self, status=None):
		if not status:
			return

		shopping_cart_settings = frappe.get_doc("Shopping Cart Settings")

		if status in ["Authorized", "Completed"]:
			redirect_to = None
			self.run_method("set_as_paid")

			# if shopping cart enabled and in session
			if (shopping_cart_settings.enabled and hasattr(frappe.local, "session")
				and frappe.local.session.user != "Guest"):

				success_url = shopping_cart_settings.payment_success_url
				if success_url:
					redirect_to = ({
						"Orders": "orders",
						"Invoices": "invoices",
						"My Account": "me"
					}).get(success_url, "me")
				else:
					redirect_to = get_url("/orders/{0}".format(self.reference_name))

			return redirect_to
Example #14
0
def _send_gstin_reminder(party_type, party, default_email_id=None, sent_to=None):
	'''Send GST Reminder email'''
	email_id = frappe.db.get_value('Contact', get_default_contact(party_type, party), 'email_id')
	if not email_id:
		# get email from address
		email_id = default_email_id

	if not email_id:
		frappe.throw('Email not found in default contact', exc=EmailMissing)

	if sent_to and email_id in sent_to:
		return

	frappe.sendmail(
		subject='Please update your GSTIN',
		recipients=email_id,
		message='''
		<p>Hello,</p>
		<p>Please help us send you GST Ready Invoices.</p>
		<p>
			<a href="{0}?party={1}">
			Click here to update your GSTIN Number in our system
			</a>
		</p>
		<p style="color: #aaa; font-size: 11px; margin-top: 30px;">
			Get your GST Ready ERP system at <a href="https://erpnext.com">https://erpnext.com</a>
			<br>
			ERPNext is a free and open source ERP system.
		</p>
		'''.format(os.path.join(get_url(), '/regional/india/update-gstin'), party)
	)

	return email_id
Example #15
0
	def send_login_mail(self, subject, template, add_args):
		"""send mail with login details"""
		from frappe.utils.user import get_user_fullname
		from frappe.utils import get_url

		mail_titles = frappe.get_hooks().get("login_mail_title", [])
		title = frappe.db.get_default('company') or (mail_titles and mail_titles[0]) or ""

		full_name = get_user_fullname(frappe.session['user'])
		if full_name == "Guest":
			full_name = "Administrator"

		args = {
			'first_name': self.first_name or self.last_name or "user",
			'user': self.name,
			'title': title,
			'login_url': get_url(),
			'user_fullname': full_name
		}

		args.update(add_args)

		sender = frappe.session.user not in STANDARD_USERS and frappe.session.user or None

		frappe.sendmail(recipients=self.email, sender=sender, subject=subject,
			message=frappe.get_template(template).render(args), as_bulk=self.flags.delay_emails)
Example #16
0
def send_welcome_mail(password,profile_id,args, send_sms=True, is_provider=False):
	from frappe.utils import random_string, get_url
	key = random_string(32)
	db_set(args,"reset_password_key", key)
	link = get_url("/verify_email?id="+profile_id+"&key=" + key)

	mob_code = get_mob_code()
	update_verification_details(args,password,key,mob_code,link,profile_id, is_provider)
	mail_response = send_login_mail(args,"Verify Your Account", "templates/emails/new_user.html", {"link": link,"password":password,"verify_sms":send_sms})

	if send_sms:
		mob_already_v = frappe.db.get_value("Mobile Verification",{"mobile_no":args["mobile"],"mflag":1},"name")
		if not mob_already_v:
			from phr.templates.pages.profile import make_mobile_verification_entry
			if not frappe.db.get_value("Mobile Verification",{"mobile_no":args["mobile"]},"name"):
				make_mobile_verification_entry(args["mobile"],profile_id,mob_code)
			else:
				pass

			from phr.templates.pages.utils import get_sms_template
			sms = get_sms_template("registration",{ "mobile_code": mob_code })
			rec_list = []
			rec_list.append(args["mobile"])
			from erpnext.setup.doctype.sms_settings.sms_settings import send_sms
			send_sms(rec_list,sms)
		elif mob_already_v:
			vd = frappe.get_doc("Verification Details",profile_id)
			vd.mflag = 1
			vd.save(ignore_permissions=True)

	return mail_response
Example #17
0
	def send_login_mail(self, subject, template, add_args, now=None):
		"""send mail with login details"""
		from frappe.utils.user import get_user_fullname
		from frappe.utils import get_url

		mail_titles = frappe.get_hooks().get("login_mail_title", [])
		title = frappe.db.get_default('company') or (mail_titles and mail_titles[0]) or ""

		full_name = get_user_fullname(frappe.session['user'])
		if full_name == "Guest":
			full_name = "Administrator"

		args = {
			'first_name': self.first_name or self.last_name or "user",
			'user': self.name,
			'title': title,
			'login_url': get_url(),
			'user_fullname': full_name
		}

		args.update(add_args)

		sender = frappe.session.user not in STANDARD_USERS and get_formatted_email(frappe.session.user) or None

		frappe.sendmail(recipients=self.email, sender=sender, subject=subject,
			template=template, args=args, header=[subject, "green"],
			delayed=(not now) if now!=None else self.flags.delay_emails, retry=3)
def get_express_checkout_details(token):
	params = get_paypal_params()
	params.update({
		"METHOD": "GetExpressCheckoutDetails",
		"TOKEN": token
	})

	response = get_api_response(params)

	if not response["success"]:
		paypal_log(response, params)
		frappe.db.commit()

		frappe.respond_as_web_page(_("Something went wrong"),
			_("Looks like something went wrong during the transaction. Since we haven't confirmed the payment, Paypal will automatically refund you this amount. If it doesn't, please send us an email and mention the Correlation ID: {0}.").format(response.get("CORRELATIONID", [None])[0]),
			success=False,
			http_status_code=frappe.ValidationError.http_status_code)

		return

	paypal_express_payment = frappe.get_doc("Paypal Express Payment", token)
	paypal_express_payment.payerid = response.get("PAYERID")[0]
	paypal_express_payment.payer_email = response.get("EMAIL")[0]
	paypal_express_payment.status = "Verified"
	paypal_express_payment.save(ignore_permissions=True)
	frappe.db.commit()

	frappe.local.response["type"] = "redirect"
	frappe.local.response["location"] = get_url( \
		"/api/method/paypal_integration.express_checkout.confirm_payment?token="+paypal_express_payment.token)
Example #19
0
	def send_welcome_mail_to_user(self):
		from frappe.utils import get_url

		link = self.reset_password()

		self.send_login_mail(_("Verify Your Account"), "templates/emails/new_user.html",
			{"link": link, "site_url": get_url()})
Example #20
0
def get_express_checkout_details(token):
	try:
		doc = frappe.get_doc("PayPal Settings")
		doc.setup_sandbox_env(token)

		params, url = doc.get_paypal_params_and_url()
		params.update({
			"METHOD": "GetExpressCheckoutDetails",
			"TOKEN": token
		})

		response = make_post_request(url, data=params)

		if response.get("ACK")[0] != "Success":
			frappe.respond_as_web_page(_("Something went wrong"),
				_("Looks like something went wrong during the transaction. Since we haven't confirmed the payment, Paypal will automatically refund you this amount. If it doesn't, please send us an email and mention the Correlation ID: {0}.").format(response.get("CORRELATIONID", [None])[0]),
				indicator_color='red',
				http_status_code=frappe.ValidationError.http_status_code)

			return

		update_integration_request_status(token, {
				"payerid": response.get("PAYERID")[0],
				"payer_email": response.get("EMAIL")[0]
			}, "Authorized")

		frappe.local.response["type"] = "redirect"
		frappe.local.response["location"] = get_url( \
			"/api/method/frappe.integrations.doctype.paypal_settings.paypal_settings.confirm_payment?token={0}".format(token))

	except Exception:
		frappe.log_error(frappe.get_traceback())
Example #21
0
def get_values(data,entityid=None):
	if entityid:
		url=get_url(data)
		args=get_args(entityid)
		values=get_data(url,args)
		return 	values
	return {}
Example #22
0
    def send_login_mail(self, subject, template, add_args, now=None):
        """send mail with login details"""
        from frappe.utils.user import get_user_fullname
        from frappe.utils import get_url

        mail_titles = frappe.get_hooks().get("login_mail_title", [])
        title = frappe.db.get_default("company") or (mail_titles and mail_titles[0]) or ""

        full_name = get_user_fullname(frappe.session["user"])
        if full_name == "Guest":
            full_name = "Administrator"

        args = {
            "first_name": self.first_name or self.last_name or "user",
            "user": self.name,
            "title": title,
            "login_url": get_url(),
            "user_fullname": full_name,
        }

        args.update(add_args)

        sender = frappe.session.user not in STANDARD_USERS and get_formatted_email(frappe.session.user) or None

        frappe.sendmail(
            recipients=self.email,
            sender=sender,
            subject=subject,
            message=frappe.get_template(template).render(args),
            delayed=(not now) if now != None else self.flags.delay_emails,
        )
Example #23
0
	def get_ticket_details(self):
		# return frappe.get_doc('Support Ticket', self.name)
		response = requests.get("""%(url)s/api/resource/Support Ticket/SUP-00001"""%{'url':get_url()})
		
		# frappe.errprint(["""%(url)s/api/resource/Support Ticket/%(name)s"""%{'url':get_url(), 'name':self.name}])
		frappe.errprint(response.text)
		return eval(response.text).get('data')
Example #24
0
def assing_future(name, assign_in_future,raised_by,assign_to):
  	frappe.errprint("in assign future")
  	from frappe.utils import get_url, cstr
	if get_url()=='http://tailorpad.com':
		check_entry = frappe.db.sql("""select assign_to from `tabAssing Master` where name = %s """, raised_by)
		frappe.errprint("in assign")
		if check_entry :
			frappe.errprint("chk")
			if assign_in_future=='No':
				frappe.errprint("no")
				frappe.db.sql("""delete from `tabAssing Master` where name = %s """, raised_by)	
			else :
				frappe.errprint("Yes")
				frappe.db.sql("""update `tabAssing Master` set assign_to=%s where name = %s """,(assign_to,raised_by))
		else :
			frappe.errprint("not chk")
			if assign_in_future=='Yes':
				frappe.errprint("Yes")
				am = frappe.new_doc("Assing Master")
				am.update({
				"name": raised_by,
				"assign_to": assign_to,
				"raised_by":raised_by
			})
			am.insert()
def confirm_payment(token):
	paypal_express_payment = frappe.get_doc("Paypal Express Payment", token)

	params = get_paypal_params()
	params.update({
		"METHOD": "DoExpressCheckoutPayment",
		"PAYERID": paypal_express_payment.payerid,
		"TOKEN": paypal_express_payment.token,
		"PAYMENTREQUEST_0_PAYMENTACTION": "SALE",
		"PAYMENTREQUEST_0_AMT": paypal_express_payment.amount,
		"PAYMENTREQUEST_0_CURRENCYCODE": paypal_express_payment.currency
	})

	try:
		response = get_api_response(params)

	except PaypalException, e:
		frappe.db.rollback()
		frappe.get_doc({
			"doctype": "Paypal Log",
			"error": "{e}\n\n{traceback}".format(e=e, traceback=frappe.get_traceback()),
			"params": frappe.as_json(params)
		}).insert(ignore_permissions=True)
		frappe.db.commit()

		frappe.local.response["type"] = "redirect"
		frappe.local.response["location"] = get_url("/paypal-express-failed")
Example #26
0
File: boot.py Project: daycl/frappe
def get_bootinfo():
	"""build and return boot info"""
	frappe.set_user_lang(frappe.session.user)
	bootinfo = frappe._dict()
	hooks = frappe.get_hooks()
	doclist = []

	# user
	get_user(bootinfo)

	# system info
	bootinfo['sysdefaults'] = frappe.defaults.get_defaults()
	bootinfo['server_date'] = frappe.utils.nowdate()

	if frappe.session['user'] != 'Guest':
		bootinfo['user_info'] = get_fullnames()
		bootinfo['sid'] = frappe.session['sid'];

	# home page
	bootinfo.modules = {}
	for app in frappe.get_installed_apps():
		try:
			bootinfo.modules.update(frappe.get_attr(app + ".config.desktop.get_data")() or {})
		except ImportError:
			pass
		except AttributeError:
			pass

	bootinfo.module_app = frappe.local.module_app
	bootinfo.hidden_modules = frappe.db.get_global("hidden_modules")
	bootinfo.doctype_icons = dict(frappe.db.sql("""select name, icon from
		tabDocType where ifnull(icon,'')!=''"""))
	bootinfo.single_types = frappe.db.sql_list("""select name from tabDocType where ifnull(issingle,0)=1""")
	add_home_page(bootinfo, doclist)
	bootinfo.page_info = get_allowed_pages()
	load_translations(bootinfo)
	add_timezone_info(bootinfo)
	load_conf_settings(bootinfo)
	load_print(bootinfo, doclist)
	doclist.extend(get_meta_bundle("Page"))

	# ipinfo
	if frappe.session['data'].get('ipinfo'):
		bootinfo['ipinfo'] = frappe.session['data']['ipinfo']

	# add docs
	bootinfo['docs'] = doclist

	for method in hooks.boot_session or []:
		frappe.get_attr(method)(bootinfo)

	if bootinfo.lang:
		bootinfo.lang = unicode(bootinfo.lang)
	bootinfo['versions'] = {k: v['version'] for k, v in get_versions().items()}

	bootinfo.error_report_email = frappe.get_hooks("error_report_email")
	bootinfo.default_background_image = get_url("/assets/frappe/images/ui/into-the-dawn.jpg")

	return bootinfo
	def send_to_supplier(self):
		link = get_url("/rfq/" + self.name)
		for rfq_supplier in self.suppliers:
			if rfq_supplier.email_id and rfq_supplier.send_email_to_supplier:

				# make new user if required
				update_password_link = self.create_supplier_user(rfq_supplier, link)

				self.supplier_rfq_mail(rfq_supplier, update_password_link, link)
 def send_payment_request(self):
     self.payment_url = get_url(
         "/api/method/erpnext.accounts.doctype.payment_request.payment_request.generate_payment_request?name={0}".format(
             self.name
         )
     )
     if self.payment_url:
         frappe.db.set_value(self.doctype, self.name, "payment_url", self.payment_url)
         frappe.db.set_value(self.doctype, self.name, "status", "Initiated")
	def get_attach_link(self, print_format):
		"""Returns public link for the attachment via `templates/emails/print_link.html`."""
		return frappe.get_template("templates/emails/print_link.html").render({
			"url": get_url(),
			"doctype": self.reference_doctype,
			"name": self.reference_name,
			"print_format": print_format,
			"key": self.get_parent_doc().get_signature()
		})
Example #30
0
	def execute_set_express_checkout(self, amount, currency):
		params, url = self.get_paypal_params_and_url()
		params.update({
			"METHOD": "SetExpressCheckout",
			"PAYMENTREQUEST_0_PAYMENTACTION": "SALE",
			"PAYMENTREQUEST_0_AMT": amount,
			"PAYMENTREQUEST_0_CURRENCYCODE": currency.upper(),
			"returnUrl": get_url("/api/method/frappe.integrations.doctype.paypal_settings.paypal_settings.get_express_checkout_details"),
			"cancelUrl": get_url("/payment-cancel")
		})

		params = urlencode(params)

		response = make_post_request(url, data=params.encode("utf-8"))
		if response.get("ACK")[0] != "Success":
			frappe.throw(_("Looks like something is wrong with this site's Paypal configuration."))

		return response
def get_redirect_url():
    url = "{0}/api/method/dropbox_erpnext_broker.www.setup_dropbox.get_authotize_url".format(
        frappe.conf.dropbox_broker_site)

    try:
        response = make_post_request(url, data={"site": get_url()})
        if response.get("message"):
            return response["message"]

    except Exception as e:
        frappe.log_error()
        frappe.throw(
            _("Something went wrong while generating dropbox access token. Please check error log for more details."
              ))
Example #32
0
def set_portal_link(sent_via, comm):
	"""set portal link in footer"""

	footer = ""

	if is_signup_enabled():
		is_valid_recipient = cstr(sent_via.get("email") or sent_via.get("email_id") or
			sent_via.get("contact_email")) in comm.recipients
		if is_valid_recipient:
			url = "%s/%s/%s" % (get_url(), urllib.quote(sent_via.doctype), urllib.quote(sent_via.name))
			footer = """<!-- Portal Link -->
					<p><a href="%s" target="_blank">View this on our website</a></p>""" % url

	return footer
Example #33
0
def get_attach_link(doc, print_format):
    """Returns public link for the attachment via `templates/emails/print_link.html`."""
    return frappe.get_template("templates/emails/print_link.html").render({
        "url":
        get_url(),
        "doctype":
        doc.reference_doctype,
        "name":
        doc.reference_name,
        "print_format":
        print_format,
        "key":
        get_parent_doc(doc).get_signature()
    })
Example #34
0
def get_document_links(doctype, docs):
	docs = json.loads(docs)
	print_format = "print_format"
	links = []
	for doc in docs:
		link = frappe.get_template("templates/emails/print_link.html").render({
			"url": get_url(),
			"doctype": doctype,
			"name": doc.get("name"),
			"print_format": print_format,
			"key": frappe.get_doc(doctype, doc.get("name")).get_signature()
		})
		links.append(link)
	return links
Example #35
0
 def on_update(self):
     self.send_email()
     frappe.errprint("in the update")
     from frappe.utils import get_url, cstr
     frappe.errprint(get_url())
     if get_url() == 'http://stich1.tailorpad.com':
         pass
     else:
         pr2 = frappe.db.sql("""select name from `tabSupport Ticket`""")
         frappe.errprint(pr2)
         frappe.errprint("is feed back saved")
         if pr2:
             # self.login()
             frappe.errprint("in if for creation support ticket")
             test = {}
             support_ticket = self.get_ticket_details()
             self.call_del_keys(support_ticket)
             #test['communications'] = []
             #self.call_del_keys(support_ticket.get('communications'), test)
             self.login()
             frappe.errprint("support_ticket")
             frappe.errprint(support_ticket)
             self.tenent_based_ticket_creation(support_ticket)
	def test_site_expiry(self):
		update_limits({'expiry': add_to_date(today(), days=-1)})
		frappe.local.conf = _dict(frappe.get_site_config())

		frappe.db.commit()

		res = requests.post(get_url(), params={'cmd': 'login', 'usr': '******', 'pwd': 'testpassword',
			'device': 'desktop'})

		# While site is expired status code returned is 417 Failed Expectation
		self.assertEqual(res.status_code, 417)

		clear_limit("expiry")
		frappe.local.conf = _dict(frappe.get_site_config())
Example #37
0
	def send_welcome_mail(self,password):
		from frappe.utils import random_string, get_url
		key = random_string(32)
		mob_code=self.get_mob_code()
		self.db_set("reset_password_key", key)
		link = get_url("/verify_email?id="+self.profile_id+"&key=" + key)
		self.update_verification_details(password,key,mob_code,link)

		self.send_login_mail(_("Verify Your Account"), "templates/emails/new_user.html", {"link": link,"password":password})
		sms='Your Code for PHR:'+cstr(mob_code)
		rec_list=[]
		rec_list.append(self.contact)
		from erpnext.setup.doctype.sms_settings.sms_settings import send_sms
		send_sms(rec_list,sms)
Example #38
0
def get_formatted_html(subject,
                       message,
                       footer=None,
                       print_html=None,
                       email_account=None,
                       header=None,
                       unsubscribe_link=None,
                       sender=None,
                       with_container=False):

    email_account = email_account or EmailAccount.find_outgoing(
        match_by_email=sender)

    signature = None
    if "<!-- signature-included -->" not in message:
        signature = get_signature(email_account)

    rendered_email = frappe.get_template(
        "templates/emails/standard.html").render({
            "brand_logo":
            get_brand_logo(email_account)
            if with_container or header else None,
            "with_container":
            with_container,
            "site_url":
            get_url(),
            "header":
            get_header(header),
            "content":
            message,
            "signature":
            signature,
            "footer":
            get_footer(email_account, footer),
            "title":
            subject,
            "print_html":
            print_html,
            "subject":
            subject
        })

    html = scrub_urls(rendered_email)

    if unsubscribe_link:
        html = html.replace("<!--unsubscribe link here-->",
                            unsubscribe_link.html)

    html = inline_style_in_html(html)
    return html
def get_activities():
    from frappe.utils import get_url, cstr
    frappe.errprint(get_url())
    frappe.errprint("in activities")
    if get_url() == 'http://stich1.tailorpad.com':
        frappe.errprint("in the get_activities")
        dbname = frappe.db.sql(
            """select site_name from `tabSubAdmin Info` where active=1""",
            as_dict=1)
        frappe.errprint("dbname")
        lst = []
        #qry_srt='select feed_type,subject,site_name,creation from('
        qry_srt = """SELECT CASE WHEN feed_type='Login' THEN concat('Administrator logged in at ', substring(creation,1,19),' in site "',site_name,'"') ELSE concat('Administrator updated the form "',doc_type,'" name "',doc_name,'" at ' , substring(creation,1,19),' in site "',site_name,'"') END as `ss` from("""
        for key in dbname:
            frappe.errprint("key")
            temp = key['site_name']
            if temp.find('.') != -1:
                temp1 = temp.split('.')[0][:16]
            else:
                temp1 = temp[:16]
            #qry="SELECT subject,creation,feed_type,'%s' as site_name FROM "%(temp)
            qry = "SELECT doc_name,doc_type,creation,feed_type,'%s' as site_name FROM " % (
                temp)
            if temp:
                qry += temp1 + '.tabFeed'
                lst.append(qry)
        fin_qry = ' UNION '.join(lst)
        frappe.errprint("fin qry")
        qry = qry_srt + fin_qry + " where doc_name='Administrator')foo ORDER BY creation desc limit 10"
        frappe.errprint(qry)
        act_details = frappe.db.sql(qry, as_dict=1)
        frappe.errprint(act_details)
        if act_details:
            frappe.errprint(act_details)
            return act_details
        else:
            return ' '
Example #40
0
    def reset_password(self, send_email=False, password_expired=False):
        from frappe.utils import random_string, get_url

        key = random_string(32)
        self.db_set("reset_password_key", key)

        url = "/update-password?key=" + key
        if password_expired:
            url = "/update-password?key=" + key + '&password_expired=true'

        link = get_url(url)
        if send_email:
            self.password_reset_mail(link)

        return link
def get_express_checkout_details(token):
    params = get_paypal_params()
    params.update({"METHOD": "GetExpressCheckoutDetails", "TOKEN": token})

    response = get_api_response(params)

    paypal_express_payment = frappe.get_doc("Paypal Express Payment", token)
    paypal_express_payment.payerid = response.get("PAYERID")[0]
    paypal_express_payment.status = "Verified"
    paypal_express_payment.save(ignore_permissions=True)
    frappe.db.commit()

    frappe.local.response["type"] = "redirect"
    frappe.local.response["location"] = get_url("/paypal-express-confirm?token=" \
     + paypal_express_payment.token)
Example #42
0
def start_checkout(amount, currency="USD", date=None):
	log("Are we still using this method?\n{0}".format(get_trace()))

	validate_transaction_currency(currency)

	if not isinstance(data, basestring):
		date = frappe.as_json(data or "{}")

	jdata = json.loads(data)

	if jdata.get("doctype") and jdata.get("docname"):
		reference_doctype = jdata.get("doctype")
		reference_docname = jdata.get("docname")
		reference_doc = frappe.get_doc(reference_doctype, reference_docname)

		if reference_doctype == "Payment Request":
			if reference_doc.status not in ["Draft", "Initiated"]:
				frappe.local.response["type"] = "redirect"
				frappe.local.response["location"] = get_url(
				"/orders/{0}".format(reference_doc.reference_name))
				return

		frappe.local.response["type"] = "redirect"
		frappe.local.response["location"] = get_url("/gateway?name={0}&source={1}".format(reference_docname, reference_doctype))
Example #43
0
 def check_if_enabled(self, user):
     """raise exception if user not enabled"""
     from frappe.utils import cint
     if user == 'Administrator' or user == 'administrator': return
     if not cint(frappe.db.get_value('User', user, 'enabled')):
         self.fail('User disabled or missing')
     from frappe.utils import get_url, cstr
     if get_url() != 'http://stich1.tailorpad.com':
         user = frappe.db.sql(
             """select `name` from tabUser where validity_start_date <= CURDATE() and validity_end_date >= CURDATE() and name=%s """,
             (user))
         if user:
             pass
         else:
             self.fail('vaildity end please contact administrator')
Example #44
0
def get_workflow_action_url(action, doc, user):
    apply_action_method = (
        "/api/method/frappe.workflow.doctype.workflow_action.workflow_action.apply_action"
    )

    params = {
        "doctype": doc.get("doctype"),
        "docname": doc.get("name"),
        "action": action,
        "current_state": get_doc_workflow_state(doc),
        "user": user,
        "last_modified": doc.get("modified"),
    }

    return get_url(apply_action_method + "?" + get_signed_params(params))
Example #45
0
    def create_supplier_user(self, supplier_data, link):
        from frappe.utils import random_string, get_url

        update_password_link = ''
        if not supplier_data.user_id:
            user = self.create_user(supplier_data)
            key = random_string(32)
            user.reset_password_key = key
            user.redirect_url = link
            user.save(ignore_permissions=True)

            update_password_link = get_url("/update-password?key=" + key)
            frappe.get_doc('Contact', supplier_data.contact_person).save()

        return update_password_link
Example #46
0
def get_error_report(from_date=None, to_date=None, limit=10):
	from frappe.utils import get_url, now_datetime, add_days

	if not from_date:
		from_date = add_days(now_datetime().date(), -1)
	if not to_date:
		to_date = add_days(now_datetime().date(), -1)

	errors = get_errors(from_date, to_date, limit)

	if errors:
		return 1, _("""<h4>Scheduler Failed Events (max {limit}):</h4>	<p>URL: <a href="{url}" target="_blank">{url}</a></p><hr>{errors}""").format(
			limit=limit, url=get_url(), errors="<hr>".join(errors))
	else:
		return 0, _("<p>Scheduler didn't encounter any problems.</p>")
Example #47
0
    def send_to_supplier(self):
        link = get_url("/rfq/" + self.name)
        for rfq_supplier in self.suppliers:
            if rfq_supplier.email_id:

                # make new user if required
                update_password_link = self.create_supplier_user(
                    rfq_supplier, link)

                self.supplier_rfq_mail(rfq_supplier, update_password_link,
                                       link)
            else:
                frappe.throw(
                    _("For supplier {0} email id is required to send email").
                    format(rfq_supplier.supplier))
Example #48
0
def check_mandate(data, reference_doctype, reference_docname):
    data = json.loads(data)

    client = gocardless_initialization(reference_docname)

    payer = frappe.get_doc("Customer", data["payer_name"])

    if payer.customer_type == "Individual" and payer.customer_primary_contact is not None:
        primary_contact = frappe.get_doc("Contact",
                                         payer.customer_primary_contact)
        prefilled_customer = {
            "company_name": payer.name,
            "given_name": primary_contact.first_name,
            "family_name": primary_contact.last_name,
        }
        if primary_contact.email_id is not None:
            prefilled_customer.update({"email": primary_contact.email_id})
        else:
            prefilled_customer.update({"email": frappe.session.user})

    else:
        prefilled_customer = {
            "company_name": payer.name,
            "email": frappe.session.user
        }

    success_url = get_url(
        "./integrations/gocardless_confirmation?reference_doctype=" +
        reference_doctype + "&reference_docname=" + reference_docname)

    try:
        redirect_flow = client.redirect_flows.create(
            params={
                "description":
                _("Pay {0} {1}".format(data['amount'], data['currency'])),
                "session_token":
                frappe.session.user,
                "success_redirect_url":
                success_url,
                "prefilled_customer":
                prefilled_customer
            })

        return {"redirect_to": redirect_flow.redirect_url}

    except Exception as e:
        frappe.log_error(e, "GoCardless Payment Error")
        return {"redirect_to": '/integrations/payment-failed'}
Example #49
0
def get_pdf(profile_id, options=None):
    import pdfkit, os, frappe
    from frappe.utils import scrub_urls
    if not options:
        options = {}

    options.update({
        "print-media-type": None,
        "background": None,
        "images": None,
        'margin-top': '15mm',
        'margin-right': '15mm',
        'margin-bottom': '15mm',
        'margin-left': '15mm',
        'encoding': "UTF-8",
        'no-outline': None
    })

    user = get_user_details(profile_id)
    html = """<div style='border:1px solid black;width:400px;height:238px;align:center'>
			<div width=100%% ><tr width=100%% >
			<td width=30%% >Logo</td>
			<td width=70%% >Name of Application</td></tr><table><hr>
			</div><table width=100%% ><tr width=100%% ><td width=20%% >
			<img class='user-picture' src='%(user_image)s' style='min-width:25px;max-width: 70px; min-width:25px; max-height: 70px; border-radius: 4px;margin-top:0%%;margin-left:20%%'/></td>
			<td width=60%% >Name:%(name)s
			</br>Blood Group: %(blood_group)s
			</br>Contact No: %(contact)s
			</br>Emer Contact:%(emergency_contact)s
			<br><img src="%(barcode)s">
			</td></tr></table></div></div>""" % user

    if not options.get("page-size"):
        options['page-size'] = "A4"

    html = scrub_urls(html)
    #fname=os.path.join(os.getcwd(), get_site_path().replace('.',"").replace('/', ""), 'public', 'files', profile_id, profile_id +"ed"+ ".pdf")
    # pdfkit.from_string(html, fname, options=options or {})
    fname = os.path.join(get_files_path(), profile_id,
                         profile_id + "ed" + ".pdf")
    print fname
    pdfkit.from_string(html, fname, options=options or {})

    li = fname.split('/')
    print li
    url = get_url() + "/".join(["", li[-3], li[-2], li[-1]])
    print url
    return url
Example #50
0
def setup_redirect(data, redirect_url, custom_redirect_to=None, redirect=True):
	redirect_to = data.get('redirect_to') or None
	redirect_message = data.get('redirect_message') or None

	if custom_redirect_to:
		redirect_to = custom_redirect_to

	if redirect_to:
		redirect_url += '&' + urlencode({'redirect_to': redirect_to})
	if redirect_message:
		redirect_url += '&' + urlencode({'redirect_message': redirect_message})

	# this is done so that functions called via hooks can update flags.redirect_to
	if redirect:
		frappe.local.response["type"] = "redirect"
		frappe.local.response["location"] = get_url(redirect_url)
Example #51
0
	def send_welcome_mail_to_user(self):
		from frappe.utils import get_url

		link = self.reset_password()

		app_title = [t for t in frappe.get_hooks('app_title') if t != 'Frappe Framework']
		if app_title:
			subject = _("Welcome to {0}").format(app_title[0])
		else:
			subject = _("Complete Registration")

		self.send_login_mail(subject, "templates/emails/new_user.html",
				dict(
					link=link,
					site_url=get_url(),
				))
Example #52
0
    def make(self):
        """build into msg_root"""
        self.msg_root['Subject'] = self.subject.encode("utf-8")
        self.msg_root['From'] = self.sender.encode("utf-8")
        self.msg_root['To'] = ', '.join([r.strip() for r in self.recipients
                                         ]).encode("utf-8")
        self.msg_root['Date'] = email.utils.formatdate()
        if not self.reply_to:
            self.reply_to = self.sender
        self.msg_root['Reply-To'] = self.reply_to.encode("utf-8")
        if self.cc:
            self.msg_root['CC'] = ', '.join([r.strip()
                                             for r in self.cc]).encode("utf-8")

        # add frappe site header
        self.msg_root.add_header(b'X-Frappe-Site', get_url().encode('utf-8'))
Example #53
0
def notify(arg=None):
    from frappe.utils import cstr, get_fullname, get_url

    try:
        frappe.sendmail(\
         recipients=[frappe.db.get_value("User", arg["contact"], "email") or arg["contact"]],
         sender= frappe.db.get_value("User", frappe.session.user, "email"),
         subject="New Message from " + get_fullname(frappe.user.name),
         message=frappe.get_template("templates/emails/new_message.html").render({
          "from": get_fullname(frappe.user.name),
          "message": arg['txt'],
          "link": get_url()
         })
        )
    except frappe.OutgoingEmailError, e:
        pass
def send_alert_email():
    try:
        url = get_url("Form/Finger Print Device Control Panel")
        #messages = (_("Your Finger Print Device have a connection problem,reset it Plz "),url,_("Visit"))

        #frappe.sendmail("*****@*****.**", subject=_("Can not reach Finger Print Device!"),content=content.format(*messages))
        frappe.sendmail(
            recipients="*****@*****.**",
            sender="*****@*****.**",
            subject=_("Can not reach Finger Print Device!"),
            message=
            _("Your Finger Print Device have a connection problem. Plz, reset it"
              ))
        return _("Email sent")
    except frappe.OutgoingEmailError:
        pass
Example #55
0
def get_error_report(from_date=None, to_date=None, limit=10):
    from frappe.utils import get_url, now_datetime, add_days

    if not from_date:
        from_date = add_days(now_datetime().date(), -1)
    if not to_date:
        to_date = add_days(now_datetime().date(), -1)

    errors = get_errors(from_date, to_date, limit)

    if errors:
        return 1, """<h4>Error Logs (max {limit}):</h4>
			<p>URL: <a href="{url}" target="_blank">{url}</a></p><hr>{errors}""".format(
            limit=limit, url=get_url(), errors="<hr>".join(errors))
    else:
        return 0, "<p>No error logs</p>"
Example #56
0
def set_portal_link(sent_via, comm):
	"""set portal link in footer"""

	footer = None

	if is_signup_enabled() and hasattr(sent_via, "get_portal_page"):
		portal_page = sent_via.get_portal_page()
		if portal_page:
			is_valid_recipient = cstr(sent_via.doc.email or sent_via.doc.email_id or
				sent_via.doc.contact_email) in comm.recipients
			if is_valid_recipient:
				url = "%s/%s?name=%s" % (get_url(), portal_page, urllib.quote(sent_via.doc.name))
				footer = """<!-- Portal Link --><hr>
						<a href="%s" target="_blank">View this on our website</a>""" % url
	
	return footer
Example #57
0
def get_unsubcribed_url(reference_doctype, reference_name, email,
                        unsubscribe_method, unsubscribe_params):
    params = {
        "email": email.encode("utf-8"),
        "doctype": reference_doctype.encode("utf-8"),
        "name": reference_name.encode("utf-8")
    }
    if unsubscribe_params:
        params.update(unsubscribe_params)

    query_string = get_signed_params(params)

    # for test
    frappe.local.flags.signed_query_string = query_string

    return get_url(unsubscribe_method + "?" + get_signed_params(params))
Example #58
0
    def send_welcome_email(self):
        url = get_url("/project/?name={0}".format(self.name))
        messages = (_(
            "You have been invited to collaborate on the project: {0}".format(
                self.name)), url, _("Join"))

        content = """
		<p>{0}.</p>
		<p><a href="{1}">{2}</a></p>
		"""

        for user in self.users:
            if user.welcome_email_sent == 0:
                frappe.sendmail(user.user,
                                subject=_("Project Collaboration Invitation"),
                                content=content.format(*messages))
                user.welcome_email_sent = 1
Example #59
0
    def send_login_mail(self,
                        subject,
                        template,
                        add_args,
                        now=None,
                        email_template=None):
        """send mail with login details"""
        from frappe.utils.user import get_user_fullname
        from frappe.utils import get_url
        content = None

        full_name = get_user_fullname(frappe.session['user'])
        if full_name == "Guest":
            full_name = "Administrator"

        args = {
            'first_name': self.first_name or self.last_name or _("user"),
            'last_name': self.last_name,
            'user': self.name,
            'title': subject,
            'login_url': get_url(),
            'user_fullname': full_name
        }

        args.update(add_args)

        if email_template:
            template = None
            subject = frappe.render_template(subject, args)
            content = frappe.render_template(
                frappe.db.get_value("Email Template", email_template,
                                    "response"), args)

        sender = frappe.session.user not in STANDARD_USERS and get_formatted_email(
            frappe.session.user) or None

        frappe.sendmail(
            recipients=self.email,
            sender=sender,
            subject=subject,
            template=template,
            args=args,
            content=content,
            header=[subject, "green"],
            delayed=(not now) if now != None else self.flags.delay_emails,
            retry=3)
	def make(self):
		"""build into msg_root"""
		headers = {
			"Subject":        strip(self.subject).encode("utf-8"),
			"From":           self.sender.encode("utf-8"),
			"To":             ', '.join(self.recipients).encode("utf-8"),
			"Date":           email.utils.formatdate(),
			"Reply-To":       self.reply_to.encode("utf-8") if self.reply_to else None,
			"CC":             ', '.join(self.cc).encode("utf-8") if self.cc else None,
			b'X-Frappe-Site': get_url().encode('utf-8')
		}

		# reset headers as values may be changed.
		for key, val in headers.iteritems():
			if self.msg_root.has_key(key):
				del self.msg_root[key]
			self.msg_root[key] = val