Esempio n. 1
0
def get_context(context):
	blog_post = context.doc

	# this is for double precaution. usually it wont reach this code if not published
	if not cint(blog_post.published):
		raise Exception, "This blog has not been published yet!"

	# temp fields
	blog_post.full_name = get_fullname(blog_post.owner)
	blog_post.updated = global_date_format(blog_post.published_on)

	if blog_post.blogger:
		blog_post.blogger_info = frappe.get_doc("Blogger", blog_post.blogger).as_dict()

	blog_post.description = blog_post.blog_intro or blog_post.content[:140]

	blog_post.metatags = {
		"name": blog_post.title,
		"description": blog_post.description,
	}

	image = find_first_image(blog_post.content)
	if image:
		blog_post.metatags["image"] = image

	blog_post.categories = frappe.db.sql_list("select name from `tabBlog Category` order by name")

	blog_post.comment_list = frappe.db.sql("""\
		select comment, comment_by_fullname, creation
		from `tabComment` where comment_doctype="Blog Post"
		and comment_docname=%s order by creation""", (blog_post.name,), as_dict=1) or []

	return blog_post.__dict__
Esempio n. 2
0
	def get_context(self, context):
		# this is for double precaution. usually it wont reach this code if not published
		if not cint(self.published):
			raise Exception, "This blog has not been published yet!"

		# temp fields
		context.full_name = get_fullname(self.owner)
		context.updated = global_date_format(self.published_on)

		if self.blogger:
			context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict()

		context.description = self.blog_intro or self.content[:140]

		context.metatags = {
			"name": self.title,
			"description": context.description,
		}

		image = find_first_image(self.content)
		if image:
			context.metatags["image"] = image

		context.categories = frappe.db.sql_list("""select name from
			`tabBlog Category` order by name""")

		context.comment_list = get_comment_list(self.doctype, self.name)

		context.children = get_children()

		return context
Esempio n. 3
0
def get_blog_list(start=0, by=None, category=None):
	condition = ""
	if by:
		condition = " and t1.blogger='%s'" % by.replace("'", "\'")
	if category:
		condition += " and t1.blog_category='%s'" % category.replace("'", "\'")
	query = """\
		select
			t1.title, t1.name, t3.name as page_name, t1.published_on as creation,
				day(t1.published_on) as day, monthname(t1.published_on) as month,
				year(t1.published_on) as year,
				ifnull(t1.blog_intro, t1.content) as content,
				t2.full_name, t2.avatar, t1.blogger,
				(select count(name) from `tabComment` where
					comment_doctype='Blog Post' and comment_docname=t1.name) as comments
		from `tabBlog Post` t1, `tabBlogger` t2, `tabWebsite Route` t3
		where ifnull(t1.published,0)=1
		and t1.blogger = t2.name
		and t3.docname = t1.name
		and t3.ref_doctype = "Blog Post"
		%(condition)s
		order by published_on desc, name asc
		limit %(start)s, 20""" % {"start": start, "condition": condition}

	result = frappe.db.sql(query, as_dict=1)

	# strip html tags from content
	for res in result:
		res['published'] = global_date_format(res['creation'])
		res['content'] = res['content'][:140]

	return result
Esempio n. 4
0
    def get_message_details(self):
        '''Return args for template'''
        dws_group = frappe.get_doc('Daily Work Summary Group',
                                   self.daily_work_summary_group)

        replies = frappe.get_all('Communication',
                                 fields=['content', 'text_content', 'sender'],
                                 filters=dict(
                                     reference_doctype=self.doctype,
                                     reference_name=self.name,
                                     communication_type='Communication',
                                     sent_or_received='Received'),
                                 order_by='creation asc')

        did_not_reply = self.email_sent_to.split()

        for d in replies:
            user = frappe.db.get_values("User", {"email": d.sender},
                                        ["full_name", "user_image"],
                                        as_dict=True)

            d.sender_name = user[0].full_name if user else d.sender
            d.image = user[0].image if user and user[0].image else None

            original_image = d.image
            # make thumbnail image
            try:
                if original_image:
                    file_name = frappe.get_list('File',
                                                {'file_url': original_image})

                    if file_name:
                        file_name = file_name[0].name
                        file_doc = frappe.get_doc('File', file_name)
                        thumbnail_image = file_doc.make_thumbnail(
                            set_as_thumbnail=False,
                            width=100,
                            height=100,
                            crop=True)
                        d.image = thumbnail_image
            except:
                d.image = original_image

            if d.sender in did_not_reply:
                did_not_reply.remove(d.sender)
            if d.text_content:
                d.content = frappe.utils.md_to_html(
                    EmailReplyParser.parse_reply(d.text_content))

        did_not_reply = [
            (frappe.db.get_value("User", {"email": email}, "full_name")
             or email) for email in did_not_reply
        ]

        return dict(replies=replies,
                    original_message=dws_group.message,
                    title=_('Work Summary for {0}'.format(
                        global_date_format(self.creation))),
                    did_not_reply=', '.join(did_not_reply) or '',
                    did_not_reply_title=_('No replies from'))
Esempio n. 5
0
	def get_context(self, context):
		# this is for double precaution. usually it wont reach this code if not published
		if not cint(self.published):
			raise Exception, "This blog has not been published yet!"

		# temp fields
		context.full_name = get_fullname(self.owner)
		context.updated = global_date_format(self.published_on)

		if self.blogger:
			context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict()

		context.description = self.blog_intro or self.content[:140]

		context.metatags = {
			"name": self.title,
			"description": context.description,
		}

		image = find_first_image(self.content)
		if image:
			context.metatags["image"] = image

		context.categories = frappe.db.sql_list("""select name from
			`tabBlog Category` order by name""")

		context.comment_list = get_comment_list(self.doctype, self.name)

		return context
Esempio n. 6
0
	def get_context(self, context):
		# this is for double precaution. usually it wont reach this code if not published
		if not cint(self.published):
			raise Exception, "This blog has not been published yet!"

		# temp fields
		context.full_name = get_fullname(self.owner)
		context.updated = global_date_format(self.published_on)

		if self.blogger:
			context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict()

		context.description = self.blog_intro or self.content[:140]

		context.metatags = {
			"name": self.title,
			"description": context.description,
		}

		if "<!-- markdown -->" in context.content:
			context.content = markdown(context.content)

		image = find_first_image(self.content)
		if image:
			context.metatags["image"] = image

		context.comment_list = get_comment_list(self.doctype, self.name)

		context.children = get_children()

		category = frappe.db.get_value("Blog Category", context.doc.blog_category, ["title", "page_name"], as_dict=1)
		context.parents = [{"title": category.title, "name": "blog/{0}".format(category.page_name)}]
Esempio n. 7
0
	def get_message_details(self):
		'''Return args for template'''
		settings = frappe.get_doc('Daily Work Summary Settings')

		replies = frappe.get_all('Communication', fields=['content', 'text_content', 'sender'],
			filters=dict(reference_doctype=self.doctype, reference_name=self.name,
				communication_type='Communication', sent_or_received='Received'),
				order_by='creation asc')

		did_not_reply = self.email_sent_to.split()

		for d in replies:
			emp = frappe.db.get_values("Employee", {"user_id": d.sender},
				["employee_name", "image"], as_dict=True)

			d.sender_name = emp[0].employee_name if emp else d.sender
			d.image = emp[0].image if emp and emp[0].image else None

			if d.sender in did_not_reply:
				did_not_reply.remove(d.sender)
			if d.text_content:
				d.content = markdown(EmailReplyParser.parse_reply(d.text_content))


		did_not_reply = [(frappe.db.get_value("Employee", {"user_id": email}, "employee_name") or email)
			for email in did_not_reply]

		return dict(replies=replies,
			original_message=settings.message,
			title=_('Daily Work Summary for {0}'.format(global_date_format(self.creation))),
			did_not_reply= ', '.join(did_not_reply) or '',
			did_not_reply_title = _('No replies from'))
Esempio n. 8
0
def get_blog_list(doctype,
                  txt=None,
                  filters=None,
                  limit_start=0,
                  limit_page_length=20):
    conditions = []
    if filters:
        if filters.by:
            conditions.append('t1.blogger="%s"' % frappe.db.escape(filters.by))
        if filters.category:
            conditions.append(
                't1.blog_category="%s"' %
                frappe.db.escape(get_blog_category(filters.category)))

    if txt:
        conditions.append('t1.content like "%{0}%"'.format(
            frappe.db.escape(txt)))

    if conditions:
        frappe.local.no_cache = 1

    query = """\
		select
			t1.title, t1.name, t1.blog_category, t1.parent_website_route, t1.published_on,
				concat(t1.parent_website_route, "/", t1.page_name) as page_name,
				t1.published_on as creation,
				ifnull(t1.blog_intro, t1.content) as content,
				t2.full_name, t2.avatar, t1.blogger,
				(select count(name) from `tabComment` where
					comment_doctype='Blog Post' and comment_docname=t1.name and comment_type="Comment") as comments
		from `tabBlog Post` t1, `tabBlogger` t2
		where ifnull(t1.published,0)=1
		and t1.blogger = t2.name
		%(condition)s
		order by published_on desc, name asc
		limit %(start)s, %(page_len)s""" % {
        "start": limit_start,
        "page_len": limit_page_length,
        "condition": (" and " + " and ".join(conditions)) if conditions else ""
    }

    posts = frappe.db.sql(query, as_dict=1)

    for post in posts:
        post.published = global_date_format(post.creation)
        post.content = strip_html_tags(post.content[:140])
        if not post.comments:
            post.comment_text = _('No comments yet')
        elif post.comments == 1:
            post.comment_text = _('1 comment')
        else:
            post.comment_text = _('{0} comments').format(str(post.comments))

        post.avatar = post.avatar or ""

        if (not "http:" in post.avatar or "https:"
                in post.avatar) and not post.avatar.startswith("/"):
            post.avatar = "/" + post.avatar

    return posts
Esempio n. 9
0
    def get_html_table(self, columns=None, data=None):

        date_time = global_date_format(now()) + " " + format_time(now())
        report_doctype = frappe.db.get_value("Report", self.report,
                                             "ref_doctype")

        return frappe.render_template(
            "frappe/templates/emails/auto_email_report.html",
            {
                "title":
                self.name,
                "description":
                self.description,
                "date_time":
                date_time,
                "columns":
                columns,
                "data":
                data,
                "report_url":
                get_url_to_report(self.report, self.report_type,
                                  report_doctype),
                "report_name":
                self.report,
                "edit_report_settings":
                get_link_to_form("Auto Email Report", self.name),
            },
        )
Esempio n. 10
0
def get_context(context):
	blog_post = context.bean.doc
	
	# this is for double precaution. usually it wont reach this code if not published
	if not cint(blog_post.published):
		raise Exception, "This blog has not been published yet!"
	
	# temp fields
	blog_post.full_name = get_fullname(blog_post.owner)
	blog_post.updated = global_date_format(blog_post.published_on)
	
	if blog_post.blogger:
		blog_post.blogger_info = frappe.doc("Blogger", blog_post.blogger).fields
	
	blog_post.description = blog_post.blog_intro or blog_post.content[:140]
	blog_post.meta_description = blog_post.description
	
	blog_post.categories = frappe.db.sql_list("select name from `tabBlog Category` order by name")
	
	blog_post.comment_list = frappe.db.sql("""\
		select comment, comment_by_fullname, creation
		from `tabComment` where comment_doctype="Blog Post"
		and comment_docname=%s order by creation""", (blog_post.name,), as_dict=1) or []
	
	
	return blog_post.fields
Esempio n. 11
0
    def get_html_table(self, columns=None, data=None):

        date_time = global_date_format(now()) + ' ' + format_time(now())
        report_doctype = frappe.db.get_value('Report', self.report,
                                             'ref_doctype')

        return frappe.render_template(
            'frappe/templates/emails/auto_email_report.html', {
                'title':
                self.name,
                'description':
                self.description,
                'date_time':
                date_time,
                'columns':
                columns,
                'data':
                data,
                'report_url':
                frappe.utils.get_url_to_report(self.report, self.report_type,
                                               report_doctype),
                'report_name':
                self.report,
                'edit_report_settings':
                frappe.utils.get_link_to_form('Auto Email Report', self.name)
            })
Esempio n. 12
0
	def get_context(self, context):
		# this is for double precaution. usually it wont reach this code if not published
		if not cint(self.published):
			raise Exception, "This blog has not been published yet!"

		# temp fields
		context.full_name = get_fullname(self.owner)
		context.updated = global_date_format(self.published_on)

		if self.blogger:
			context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict()

		context.description = self.blog_intro or self.content[:140]

		context.metatags = {
			"name": self.title,
			"description": context.description,
		}

		if "<!-- markdown -->" in context.content:
			context.content = markdown(context.content)

		image = find_first_image(self.content)
		if image:
			context.metatags["image"] = image

		context.comment_list = get_comment_list(self.doctype, self.name)

		context.children = get_children()

		category = frappe.db.get_value("Blog Category", context.doc.blog_category, ["title", "page_name"], as_dict=1)
		context.parents = [{"title": category.title, "name": "blog/{0}".format(category.page_name)}]
Esempio n. 13
0
	def get_context(self, context):
		# this is for double precaution. usually it wont reach this code if not published
		if not cint(self.published):
			raise Exception("This blog has not been published yet!")

		# temp fields
		context.full_name = get_fullname(self.owner)
		context.updated = global_date_format(self.published_on)

		if self.blogger:
			context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict()
			context.author = self.blogger


		context.content = get_html_content_based_on_type(self, 'content', self.content_type)
		context.description = self.blog_intro or strip_html_tags(context.content[:140])

		context.metatags = {
			"name": self.title,
			"description": context.description,
		}

		image = find_first_image(context.content)
		if image:
			context.metatags["image"] = image

		self.load_comments(context)

		context.category = frappe.db.get_value("Blog Category",
			context.doc.blog_category, ["title", "route"], as_dict=1)
		context.parents = [{"name": _("Home"), "route":"/"},
			{"name": "Blog", "route": "/blog"},
			{"label": context.category.title, "route":context.category.route}]
Esempio n. 14
0
def get_blog_list(start=0, by=None, category=None):
	condition = ""
	if by:
		condition = " and t1.blogger='%s'" % by.replace("'", "\'")
	if category:
		condition += " and t1.blog_category='%s'" % category.replace("'", "\'")
	query = """\
		select
			t1.title, t1.name, t3.name as page_name, t1.published_on as creation,
				day(t1.published_on) as day, monthname(t1.published_on) as month,
				year(t1.published_on) as year,
				ifnull(t1.blog_intro, t1.content) as content,
				t2.full_name, t2.avatar, t1.blogger,
				(select count(name) from `tabComment` where
					comment_doctype='Blog Post' and comment_docname=t1.name) as comments
		from `tabBlog Post` t1, `tabBlogger` t2, `tabWebsite Route` t3
		where ifnull(t1.published,0)=1
		and t1.blogger = t2.name
		and t3.docname = t1.name
		and t3.ref_doctype = "Blog Post"
		%(condition)s
		order by published_on desc, name asc
		limit %(start)s, 20""" % {"start": start, "condition": condition}

	result = frappe.db.sql(query, as_dict=1)

	# strip html tags from content
	for res in result:
		res['published'] = global_date_format(res['creation'])
		res['content'] = res['content'][:140]

	return result
Esempio n. 15
0
def send_shopfloor_activities_summary_report():
    """
    Similar to auto_email_report.send(), but renders the report in to a jinja template to allow for more flexibility
    """
    # Get auto email report
    auto_email_report = frappe.get_doc(
        "Auto Email Report",
        "Horizon Global (PTA): Shopfloor Activities Summary")
    report = frappe.get_doc('Report', auto_email_report.report)

    # Get report content
    columns, data = report.get_data(limit=auto_email_report.no_of_rows or 100,
                                    user=auto_email_report.user,
                                    filters=auto_email_report.filters,
                                    as_dict=True)

    # Render template
    date_time = global_date_format(now()) + ' ' + format_time(now())
    report_doctype = frappe.db.get_value('Report', auto_email_report.report,
                                         'ref_doctype')
    report_html_data = frappe.render_template(
        'quality_management_system/process/report/shopfloor_activities_summary/shopfloor_activities_summary_jinja.html',
        {
            'title':
            auto_email_report.name,
            'description':
            auto_email_report.description,
            'date_time':
            date_time,
            'columns':
            columns,
            'data':
            data,
            'report_url':
            get_url_to_report(auto_email_report.report,
                              auto_email_report.report_type, report_doctype),
            'report_name':
            auto_email_report.report,
            'edit_report_settings':
            get_link_to_form('Auto Email Report', auto_email_report.name),
            'site_url':
            get_url()
        })

    # Later for testing: create PDF and attach
    # file_name = "test_dirk7.html"
    # from frappe.utils.file_manager import save_file
    # my_file = save_file(file_name, report_html_data, "Workstation",
    #     "MagnaFlux Machine",  "Home/Attachments")

    # Send email, according to Auto Email Report settings
    attachments = None
    message = report_html_data
    frappe.sendmail(recipients=auto_email_report.email_to.split(),
                    subject=auto_email_report.name,
                    message=message,
                    attachments=attachments,
                    reference_doctype=auto_email_report.doctype,
                    reference_name=auto_email_report.name)
Esempio n. 16
0
	def get_message_details(self):
		"""Return args for template"""
		dws_group = frappe.get_doc("Daily Work Summary Group", self.daily_work_summary_group)

		replies = frappe.get_all(
			"Communication",
			fields=["content", "text_content", "sender"],
			filters=dict(
				reference_doctype=self.doctype,
				reference_name=self.name,
				communication_type="Communication",
				sent_or_received="Received",
			),
			order_by="creation asc",
		)

		did_not_reply = self.email_sent_to.split()

		for d in replies:
			user = frappe.db.get_values(
				"User", {"email": d.sender}, ["full_name", "user_image"], as_dict=True
			)

			d.sender_name = user[0].full_name if user else d.sender
			d.image = user[0].image if user and user[0].image else None

			original_image = d.image
			# make thumbnail image
			try:
				if original_image:
					file_name = frappe.get_list("File", {"file_url": original_image})

					if file_name:
						file_name = file_name[0].name
						file_doc = frappe.get_doc("File", file_name)
						thumbnail_image = file_doc.make_thumbnail(
							set_as_thumbnail=False, width=100, height=100, crop=True
						)
						d.image = thumbnail_image
			except Exception:
				d.image = original_image

			if d.sender in did_not_reply:
				did_not_reply.remove(d.sender)
			if d.text_content:
				d.content = frappe.utils.md_to_html(EmailReplyParser.parse_reply(d.text_content))

		did_not_reply = [
			(frappe.db.get_value("User", {"email": email}, "full_name") or email) for email in did_not_reply
		]

		return dict(
			replies=replies,
			original_message=dws_group.message,
			title=_("Work Summary for {0}").format(global_date_format(self.creation)),
			did_not_reply=", ".join(did_not_reply) or "",
			did_not_reply_title=_("No replies from"),
		)
Esempio n. 17
0
def get_blog_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by=None):
	conditions = []
	if filters:
		if filters.blogger:
			conditions.append('t1.blogger="%s"' % frappe.db.escape(filters.blogger))
		if filters.blog_category:
			conditions.append('t1.blog_category="%s"' % frappe.db.escape(filters.blog_category))

	if txt:
		conditions.append('(t1.content like "%{0}%" or t1.title like "%{0}%")'.format(frappe.db.escape(txt)))

	if conditions:
		frappe.local.no_cache = 1

	query = """\
		select
			t1.title, t1.name, t1.blog_category, t1.route, t1.published_on,
				t1.published_on as creation,
				t1.content as content,
				ifnull(t1.blog_intro, t1.content) as intro,
				t2.full_name, t2.avatar, t1.blogger,
				(select count(name) from `tabCommunication`
					where
						communication_type='Comment'
						and comment_type='Comment'
						and reference_doctype='Blog Post'
						and reference_name=t1.name) as comments
		from `tabBlog Post` t1, `tabBlogger` t2
		where ifnull(t1.published,0)=1
		and t1.blogger = t2.name
		%(condition)s
		order by published_on desc, name asc
		limit %(start)s, %(page_len)s""" % {
			"start": limit_start, "page_len": limit_page_length,
				"condition": (" and " + " and ".join(conditions)) if conditions else ""
		}

	posts = frappe.db.sql(query, as_dict=1)

	for post in posts:
		post.cover_image = find_first_image(post.content)
		post.published = global_date_format(post.creation)
		post.content = strip_html_tags(post.content[:340])
		if not post.comments:
			post.comment_text = _('No comments yet')
		elif post.comments==1:
			post.comment_text = _('1 comment')
		else:
			post.comment_text = _('{0} comments').format(str(post.comments))

		post.avatar = post.avatar or ""
		post.category = frappe.db.get_value('Blog Category', post.blog_category,
			['route', 'title'], as_dict=True)

		if post.avatar and (not "http:" in post.avatar and not "https:" in post.avatar) and not post.avatar.startswith("/"):
			post.avatar = "/" + post.avatar

	return posts
Esempio n. 18
0
def get_blog_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by=None):
	conditions = []
	if filters:
		if filters.blogger:
			conditions.append('t1.blogger=%s' % frappe.db.escape(filters.blogger))
		if filters.blog_category:
			conditions.append('t1.blog_category=%s' % frappe.db.escape(filters.blog_category))

	if txt:
		conditions.append('(t1.content like {0} or t1.title like {0}")'.format(frappe.db.escape('%' + txt + '%')))

	if conditions:
		frappe.local.no_cache = 1

	query = """\
		select
			t1.title, t1.name, t1.blog_category, t1.route, t1.published_on,
				t1.published_on as creation,
				t1.content as content,
				ifnull(t1.blog_intro, t1.content) as intro,
				t2.full_name, t2.avatar, t1.blogger,
				(select count(name) from `tabComment`
					where
						and comment_type='Comment'
						and reference_doctype='Blog Post'
						and reference_name=t1.name) as comments
		from `tabBlog Post` t1, `tabBlogger` t2
		where ifnull(t1.published,0)=1
		and t1.blogger = t2.name
		%(condition)s
		order by published_on desc, name asc
		limit %(start)s, %(page_len)s""" % {
			"start": limit_start, "page_len": limit_page_length,
				"condition": (" and " + " and ".join(conditions)) if conditions else ""
		}

	posts = frappe.db.sql(query, as_dict=1)

	for post in posts:
		post.cover_image = find_first_image(post.content)
		post.published = global_date_format(post.creation)
		post.content = strip_html_tags(post.content[:340])
		if not post.comments:
			post.comment_text = _('No comments yet')
		elif post.comments==1:
			post.comment_text = _('1 comment')
		else:
			post.comment_text = _('{0} comments').format(str(post.comments))

		post.avatar = post.avatar or ""
		post.category = frappe.db.get_value('Blog Category', post.blog_category,
			['route', 'title'], as_dict=True)

		if post.avatar and (not "http:" in post.avatar and not "https:" in post.avatar) and not post.avatar.startswith("/"):
			post.avatar = "/" + post.avatar

	return posts
Esempio n. 19
0
    def get_context(self, context):
        # this is for double precaution. usually it wont reach this code if not published
        if not cint(self.published):
            raise Exception("This blog has not been published yet!")

        # temp fields
        context.full_name = get_fullname(self.owner)
        context.updated = global_date_format(self.published_on)

        if self.blogger:
            context.blogger_info = frappe.get_doc("Blogger",
                                                  self.blogger).as_dict()

        context.description = self.blog_intro or self.content[:140]

        context.metatags = {
            "name": self.title,
            "description": context.description,
        }

        if "<!-- markdown -->" in context.content:
            context.content = markdown(context.content)

        blog_settings = frappe.get_doc('Blog Settings', 'Blog Settings')

        context.enable_comments = blog_settings.enable_comments
        context.enable_blogger_info = blog_settings.enable_blogger_info

        image = find_first_image(self.content)
        if image:
            context.metatags["image"] = image

        context.comment_list = get_comment_list(self.doctype, self.name)
        if not context.comment_list:
            context.comment_text = _('No comments yet')
        else:
            if (len(context.comment_list)) == 1:
                context.comment_text = _('1 comment')
            else:
                context.comment_text = _('{0} comments').format(
                    len(context.comment_list))

        context.category = frappe.db.get_value("Blog Category",
                                               context.doc.blog_category,
                                               ["title", "route"],
                                               as_dict=1)
        context.parents = [{
            "name": _("Home"),
            "route": "/"
        }, {
            "name": "Blog",
            "route": "/blog"
        }, {
            "label": context.category.title,
            "route": context.category.route
        }]
Esempio n. 20
0
    def get_context(self, context):
        # this is for double precaution. usually it wont reach this code if not published
        if not cint(self.published):
            raise Exception("This blog has not been published yet!")

        context.no_breadcrumbs = True

        # temp fields
        context.full_name = get_fullname(self.owner)
        context.updated = global_date_format(self.published_on)
        context.social_links = self.fetch_social_links_info()
        context.cta = self.fetch_cta()
        context.enable_cta = not self.hide_cta and frappe.db.get_single_value(
            "Blog Settings", "show_cta_in_blog", cache=True)

        if self.blogger:
            context.blogger_info = frappe.get_doc("Blogger",
                                                  self.blogger).as_dict()
            context.author = self.blogger

        context.content = get_html_content_based_on_type(
            self, 'content', self.content_type)

        #if meta description is not present, then blog intro or first 140 characters of the blog will be set as description
        context.description = self.meta_description or self.blog_intro or strip_html_tags(
            context.content[:140])

        context.metatags = {
            "name": self.meta_title,
            "description": context.description,
        }

        #if meta image is not present, then first image inside the blog will be set as the meta image
        image = find_first_image(context.content)
        context.metatags["image"] = self.meta_image or image or None

        self.load_comments(context)
        self.load_feedback(context)

        context.category = frappe.db.get_value("Blog Category",
                                               context.doc.blog_category,
                                               ["title", "route"],
                                               as_dict=1)
        context.parents = [{
            "name": _("Home"),
            "route": "/"
        }, {
            "name": "Blog",
            "route": "/blog"
        }, {
            "label": context.category.title,
            "route": context.category.route
        }]
        context.guest_allowed = True
Esempio n. 21
0
def get_blog_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20):
	conditions = []
	if filters:
		if filters.by:
			conditions.append('t1.blogger="%s"' % frappe.db.escape(filters.by))
		if filters.category:
			conditions.append('t1.blog_category="%s"' % frappe.db.escape(get_blog_category(filters.category)))

	if txt:
		conditions.append('t1.content like "%{0}%"'.format(frappe.db.escape(txt)))

	if conditions:
		frappe.local.no_cache = 1

	query = """\
		select
			t1.title, t1.name, t1.blog_category, t1.parent_website_route, t1.published_on,
				concat(t1.parent_website_route, "/", t1.page_name) as page_name,
				t1.published_on as creation,
				ifnull(t1.blog_intro, t1.content) as content,
				t2.full_name, t2.avatar, t1.blogger,
				(select count(name) from `tabComment` where
					comment_doctype='Blog Post' and comment_docname=t1.name and comment_type="Comment") as comments
		from `tabBlog Post` t1, `tabBlogger` t2
		where ifnull(t1.published,0)=1
		and t1.blogger = t2.name
		%(condition)s
		order by published_on desc, name asc
		limit %(start)s, %(page_len)s""" % {
			"start": limit_start, "page_len": limit_page_length,
				"condition": (" and " + " and ".join(conditions)) if conditions else ""
		}

	posts = frappe.db.sql(query, as_dict=1)

	for post in posts:
		post.published = global_date_format(post.creation)
		post.content = strip_html_tags(post.content[:140])
		if not post.comments:
			post.comment_text = _('No comments yet')
		elif post.comments==1:
			post.comment_text = _('1 comment')
		else:
			post.comment_text = _('{0} comments').format(str(post.comments))

		post.avatar = post.avatar or ""

		if (not "http:" in post.avatar or "https:" in post.avatar) and not post.avatar.startswith("/"):
			post.avatar = "/" + post.avatar

	return posts
Esempio n. 22
0
	def get_html_table(self, columns=None, data=None):

		date_time = global_date_format(now()) + ' ' + format_time(now())
		report_doctype = frappe.db.get_value('Report', self.report, 'ref_doctype')

		return frappe.render_template('frappe/templates/emails/auto_email_report.html', {
			'title': self.name,
			'description': self.description,
			'date_time': date_time,
			'columns': columns,
			'data': data,
			'report_url': get_url_to_report(self.report, self.report_type, report_doctype),
			'report_name': self.report,
			'edit_report_settings': get_link_to_form('Auto Email Report', self.name)
		})
Esempio n. 23
0
def get_data(category=None,user=None,page_no=0,limit=3):
	"""Returns processed HTML page for a standard listing."""
	conditions = []
	if page_no:
		offset = (cint(page_no) * cint(limit))
	else:
		offset = 0	 
	#next_start = cint(limit_start) + cint(limit_page_length)
	if user:
		conditions.append('t1.post_by="%s"' % frappe.db.escape(user))
	if category:
		conditions.append('t1.blog_category="%s"' % frappe.db.escape(category))

	limit_query = " limit %(start)s offset %(page_len)s"%{"start": limit, "page_len":offset }
 
	query = """\
		select
			t1.title, t1.name, t1.blog_category, t1.published_on,
				t1.published_on as creation,
				ifnull(t1.intro, t1.content) as content,
				t2.employee_name,t1.post_by,
				(select count(name) from `tabComment` where
					comment_doctype='Discussion Topic' and comment_docname=t1.name and comment_type="Comment") as comments
		from `tabDiscussion Topic` t1, `tabEmployee` t2
		where ifnull(t1.published,0)=1
		and t1.post_by = t2.name
		%(condition)s
		order by published_on desc, name asc""" % {
			"condition": (" and " + " and ".join(conditions)) if conditions else ""
		}

	posts = frappe.db.sql(query+ limit_query, as_dict=1)

	for post in posts:
		post.published = global_date_format(post.creation)
		post.content = strip_html_tags(post.content[:140])
		post.assigned = check_if_assigned(post)
		if not post.comments:
			post.comment_text = _('No comments yet')
		elif post.comments==1:
			post.comment_text = _('1 comment')
		else:
			post.comment_text = _('{0} comments').format(str(post.comments))

	total_records = get_total_topics(conditions)
	paginate = True if total_records > limit else False
	total_pages = math.ceil(total_records/flt(limit))
	return posts,total_pages,int(page_no)+1,paginate  if posts else {}
Esempio n. 24
0
	def get_context(self, context):
		# this is for double precaution. usually it wont reach this code if not published
		if not cint(self.published):
			raise Exception("This blog has not been published yet!")

		# temp fields
		context.full_name = get_fullname(self.owner)
		context.updated = global_date_format(self.published_on)

		if self.blogger:
			context.blogger_info = frappe.get_doc("Blogger", self.blogger).as_dict()

		context.description = self.blog_intro or self.content[:140]

		context.metatags = {
			"name": self.title,
			"description": context.description,
		}

		if "<!-- markdown -->" in context.content:
			context.content = markdown(context.content)

		image = find_first_image(self.content)
		if image:
			context.metatags["image"] = image

		context.comment_list = get_comment_list(self.doctype, self.name)
		if not context.comment_list:
			context.comment_text = _('No comments yet')
		else:
			if(len(context.comment_list)) == 1:
				context.comment_text = _('1 comment')
			else:
				context.comment_text = _('{0} comments').format(len(context.comment_list))

		context.category = frappe.db.get_value("Blog Category",
			context.doc.blog_category, ["title", "route"], as_dict=1)
		context.parents = [{"name": _("Home"), "route":"/"},
			{"name": "Blog", "route": "/blog"},
			{"label": context.category.title, "route":context.category.route}]
def get_collections(date_range, driver, show_individual_stops=False):
    data = []

    filters = {"departure_time": ["between", date_range], "docstatus": 1}
    if driver:
        filters["driver"] = driver

    delivery_trips = frappe.get_all("Delivery Trip", filters=filters)

    for trip in delivery_trips:
        delivery_trip = frappe.get_doc("Delivery Trip", trip.name)

        sales_invoices = []
        delivery_amount = tax_amount = promotional_amount = unprocessed_amount = processed_amount = paid_amount = returned_amount = cancelled_amount = 0.0

        for stop in delivery_trip.delivery_stops:
            if stop.delivery_note:
                # Base amounts
                discount_stop_amount = promotional_stop_amount = 0.0
                is_promotional_delivery = frappe.db.get_value(
                    "Delivery Note", stop.delivery_note,
                    "order_type") == "Promotional"

                if stop.grand_total == 0:
                    discount_stop_amount = frappe.db.get_value(
                        "Delivery Note", stop.delivery_note, "discount_amount")

                if is_promotional_delivery:
                    promotional_stop_amount = discount_stop_amount

                # TODO: Replace promotional amount with full discount, and breakdown each
                # 		discount as a separate column, if D9 wants to
                delivery_stop_amount = stop.grand_total + promotional_stop_amount

                amount_under_terms = get_amount_under_terms(stop.sales_invoice)
                tax_stop_amount = get_tax_amount(
                    stop.sales_invoice) if stop.sales_invoice else 0.0

                # Paid amounts
                unprocessed_stop_amount = get_paid_amount(stop.sales_invoice,
                                                          stop.delivery_note,
                                                          docstatus=0)
                processed_stop_amount = get_paid_amount(stop.sales_invoice,
                                                        stop.delivery_note,
                                                        docstatus=1)
                paid_stop_amount = unprocessed_stop_amount + processed_stop_amount

                # Returned amounts
                returned_stop_amount = abs(
                    frappe.db.get_value(
                        "Delivery Note", {
                            "docstatus": 1,
                            "return_against": stop.delivery_note,
                            "issue_credit_note": 0
                        }, "sum(grand_total)") or 0)
                cancelled_stop_amount = abs(
                    frappe.db.get_value(
                        "Delivery Note", {
                            "docstatus": 1,
                            "return_against": stop.delivery_note,
                            "issue_credit_note": 1
                        }, "sum(grand_total)") or 0)

                if driver or show_individual_stops:
                    # Append individual driver collections
                    data.append({
                        "driver":
                        delivery_trip.driver_name,
                        "delivery_trip":
                        trip.name,
                        "delivery_date":
                        global_date_format(delivery_trip.departure_time),
                        "sales_invoices":
                        stop.sales_invoice,
                        "customer":
                        stop.customer,
                        "total_amount":
                        delivery_stop_amount,
                        "tax_amount":
                        tax_stop_amount,
                        "promotional_amount":
                        promotional_stop_amount,
                        "amount_under_terms":
                        amount_under_terms,
                        "cancelled_amount":
                        cancelled_stop_amount,
                        "expected_amount":
                        stop.grand_total - amount_under_terms -
                        cancelled_stop_amount,
                        "returned_amount":
                        returned_stop_amount,
                        "payment_received":
                        unprocessed_stop_amount,
                        "payment_processed":
                        processed_stop_amount,
                        "total_payment":
                        paid_stop_amount
                    })
                else:
                    delivery_amount += delivery_stop_amount
                    tax_amount += tax_stop_amount
                    promotional_amount += promotional_stop_amount
                    returned_amount += returned_stop_amount
                    cancelled_amount += cancelled_stop_amount
                    unprocessed_amount += unprocessed_stop_amount
                    processed_amount += processed_stop_amount
                    paid_amount += paid_stop_amount

            if stop.sales_invoice:
                sales_invoices.append(stop.sales_invoice)

        if not driver and not show_individual_stops:
            # Append cumulative collections for each Trip
            amount_under_terms = get_amount_under_terms(sales_invoices)
            sales_invoices = ", ".join(sales_invoices)

            data.append({
                "driver":
                delivery_trip.driver_name,
                "delivery_trip":
                trip.name,
                "delivery_date":
                global_date_format(delivery_trip.departure_time),
                "sales_invoices":
                sales_invoices,
                "total_amount":
                delivery_amount,
                "tax_amount":
                tax_amount,
                "promotional_amount":
                promotional_amount,
                "amount_under_terms":
                amount_under_terms,
                "cancelled_amount":
                cancelled_amount,
                "expected_amount":
                delivery_trip.package_total - amount_under_terms -
                cancelled_amount,
                "returned_amount":
                returned_amount,
                "payment_received":
                unprocessed_amount,
                "payment_processed":
                processed_amount,
                "total_payment":
                paid_amount
            })

    return data
def get_report_content(company, customer_name, from_date=None, to_date=None):
    """Returns html for the report in PDF format"""

    settings_doc = frappe.get_single("Customer Statements Sender")

    if not from_date:
        from_date = get_first_day(today()).strftime("%Y-%m-%d")
    if not to_date:
        to_date = today()

    # Get General Ledger report content
    report_gl = frappe.get_doc("Report", "General Ledger")
    report_gl_filters = {
        "company": company,
        "party_type": "Customer",
        "party": [customer_name],
        "from_date": from_date,
        "to_date": to_date,
        "group_by": "Group by Voucher (Consolidated)",
    }

    columns_gl, data_gl = report_gl.get_data(limit=500,
                                             user="******",
                                             filters=report_gl_filters,
                                             as_dict=True)

    # Add serial numbers
    columns_gl.insert(0, frappe._dict(fieldname="idx", label="", width="30px"))
    for i in range(len(data_gl)):
        data_gl[i]["idx"] = i + 1

    # Get ageing summary report content
    data_ageing = []
    labels_ageing = []
    if settings_doc.no_ageing != 1:
        report_ageing = frappe.get_doc("Report", "Accounts Receivable Summary")
        report_ageing_filters = {
            "company": company,
            "ageing_based_on": "Posting Date",
            "report_date": datetime.datetime.today(),
            "range1": 30,
            "range2": 60,
            "range3": 90,
            "range4": 120,
            "customer": customer_name,
        }
        columns_ageing, data_ageing = report_ageing.get_data(
            limit=50,
            user="******",
            filters=report_ageing_filters,
            as_dict=True)
        labels_ageing = {}
        for col in columns_ageing:
            if "range" in col["fieldname"]:
                labels_ageing[col["fieldname"]] = col["label"]

    # Get Letter Head
    no_letterhead = bool(
        frappe.db.get_single_value("Customer Statements Sender",
                                   "no_letter_head"))
    letter_head = frappe._dict(
        printview.get_letter_head(settings_doc, no_letterhead) or {})
    if letter_head.content:
        letter_head.content = frappe.utils.jinja.render_template(
            letter_head.content, {"doc": settings_doc.as_dict()})

    # Render Template
    date_time = global_date_format(now()) + " " + format_time(now())
    currency = frappe.db.get_value("Company", company, "default_currency")
    report_html_data = frappe.render_template(
        "erpnext_customer_statements_sender/templates/report/customer_statement_jinja.html",
        {
            "title": "Customer Statement for {0}".format(customer_name),
            "description": "Customer Statement for {0}".format(customer_name),
            "date_time": date_time,
            "columns": columns_gl,
            "data": data_gl,
            "report_name": "Customer Statement for {0}".format(customer_name),
            "filters": report_gl_filters,
            "currency": currency,
            "letter_head": letter_head.content,
            "billing_address": get_billing_address(customer_name),
            "labels_ageing": labels_ageing,
            "data_ageing": data_ageing,
        },
    )

    return report_html_data
def get_blog_context(context):

    context["blog_fields"] = [
        "published_on", "blog_intro", "route", "title", "content", "name",
        "blog_category"
    ]
    context["blog_conditions"] = ""

    hooks = frappe.get_hooks("starter_theme_blog_context_before")
    for hook in hooks:
        frappe.call(hook, context)

    #posts = frappe.get_all("Blog Post", fields=context["blog_fields"], filters={"published": 1}, order_by="published_on desc, creation desc", limit=cint(context.get("theme_display_blog_length", 4)))

    query = """\
		select
			%(fields)s,
			ifnull(t1.blog_intro, t1.content) as intro,
			t2.full_name, t2.avatar, t1.blogger,
			(select count(name) from `tabCommunication`
			where
				communication_type='Comment'
				and comment_type='Comment'
				and reference_doctype='Blog Post'
				and reference_name=t1.name) as comments
		from `tabBlog Post` t1, `tabBlogger` t2
		where ifnull(t1.published,0)=1
			and t1.blogger = t2.name
			%(condition)s
		order by published_on desc, t1.creation desc
		limit %(start)s, %(page_len)s""" % {
        "start":
        0,
        "page_len":
        cint(context.get("theme_display_blog_length", 4)),
        "condition": (" and " + " and ".join(context["blog_conditions"]))
        if context.get("blog_conditions") else "",
        "fields":
        ",".join(["t1.%s" % field for field in context["blog_fields"]])
    }

    posts = frappe.db.sql(query, as_dict=1)

    for post in posts:
        post.cover_image = find_first_image(post.content)
        post.published = global_date_format(post.creation)
        post.content = strip_html_tags(post.content[:340])
        post.intro = post.blog_intro if post.blog_intro else post.content
        if not post.comments:
            post.comment_text = _('No comments yet')
        elif post.comments == 1:
            post.comment_text = _('1 comment')
        else:
            post.comment_text = _('{0} comments').format(str(post.comments))

        post.avatar = post.avatar or ""
        post.category = frappe.db.get_value('Blog Category',
                                            post.blog_category,
                                            ['route', 'title'],
                                            as_dict=True)

        if (not "http:" in post.avatar or "https:"
                in post.avatar) and not post.avatar.startswith("/"):
            post.avatar = "/" + post.avatar

    context["blog_posts"] = posts

    hooks = frappe.get_hooks("starter_theme_blog_context_after")
    for hook in hooks:
        frappe.call(hook, context)
Esempio n. 28
0
def get_report_content(company, customer_name, from_date=None, to_date=None):
    '''Returns html for the report in PDF format'''

    settings_doc = frappe.get_single('Customer Statements Sender')

    if not from_date:
        from_date = get_first_day(today()).strftime("%Y-%m-%d")
    if not to_date:
        to_date = today()

    # Get General Ledger report content
    report_gl = frappe.get_doc('Report', 'General Ledger')
    report_gl_filters = {
        'company': company,
        'party_type': 'Customer',
        'party': [customer_name],
        'from_date': from_date,
        'to_date': to_date,
        'group_by': 'Group by Voucher (Consolidated)'
    }

    columns_gl, data_gl = report_gl.get_data(limit=500,
                                             user="******",
                                             filters=report_gl_filters,
                                             as_dict=True)

    # Add serial numbers
    columns_gl.insert(0, frappe._dict(fieldname='idx', label='', width='30px'))
    for i in range(len(data_gl)):
        data_gl[i]['idx'] = i + 1

    # Get ageing summary report content
    data_ageing = []
    labels_ageing = []
    if settings_doc.no_ageing != 1:
        report_ageing = frappe.get_doc('Report', 'Accounts Receivable Summary')
        report_ageing_filters = {
            'company': company,
            'ageing_based_on': 'Posting Date',
            'report_date': datetime.datetime.today(),
            'range1': 30,
            'range2': 60,
            'range3': 90,
            'range4': 120,
            'customer': customer_name
        }
        columns_ageing, data_ageing = report_ageing.get_data(
            limit=50,
            user="******",
            filters=report_ageing_filters,
            as_dict=True)
        labels_ageing = {}
        for col in columns_ageing:
            if 'range' in col['fieldname']:
                labels_ageing[col['fieldname']] = col['label']

    # Get Letter Head
    no_letterhead = bool(
        frappe.db.get_single_value('Customer Statements Sender',
                                   'no_letter_head'))
    letter_head = frappe._dict(
        printview.get_letter_head(settings_doc, no_letterhead) or {})
    if letter_head.content:
        letter_head.content = frappe.utils.jinja.render_template(
            letter_head.content, {"doc": settings_doc.as_dict()})

    # Render Template
    date_time = global_date_format(now()) + ' ' + format_time(now())
    currency = frappe.db.get_value('Company', company, 'default_currency')
    report_html_data = frappe.render_template(
        'erpnext_customer_statements_sender/templates/report/customer_statement_jinja.html',
        {
            'title': 'Customer Statement for {0}'.format(customer_name),
            'description': 'Customer Statement for {0}'.format(customer_name),
            'date_time': date_time,
            'columns': columns_gl,
            'data': data_gl,
            'report_name': 'Customer Statement for {0}'.format(customer_name),
            'filters': report_gl_filters,
            'currency': currency,
            'letter_head': letter_head.content,
            'billing_address': get_billing_address(customer_name),
            'labels_ageing': labels_ageing,
            'data_ageing': data_ageing
        })

    return report_html_data
Esempio n. 29
0
	def get_message_details(self):
		'''Return args for template'''
		dws_group = frappe.get_doc('Daily Work Summary Group',
			self.daily_work_summary_group)

		replies = frappe.get_all('Communication',
			fields=['content', 'text_content', 'sender'],
			filters=dict(reference_doctype=self.doctype,
				reference_name=self.name,
				communication_type='Communication',
				sent_or_received='Received'),
			order_by='creation asc')

		did_not_reply = self.email_sent_to.split()

		for d in replies:
			user = frappe.db.get_values("User",
				{"email": d.sender},
				["full_name", "user_image"],
				as_dict=True)

			d.sender_name = user[0].full_name if user else d.sender
			d.image = user[0].image if user and user[0].image else None

			original_image = d.image
			# make thumbnail image
			try:
				if original_image:
					file_name = frappe.get_list('File',
						{'file_url': original_image})

					if file_name:
						file_name = file_name[0].name
						file_doc = frappe.get_doc('File', file_name)
						thumbnail_image = file_doc.make_thumbnail(
							set_as_thumbnail=False,
							width=100,
							height=100,
							crop=True
						)
						d.image = thumbnail_image
			except:
				d.image = original_image

			if d.sender in did_not_reply:
				did_not_reply.remove(d.sender)
			if d.text_content:
				d.content = frappe.utils.md_to_html(
					EmailReplyParser.parse_reply(d.text_content)
				)

		did_not_reply = [(frappe.db.get_value("User", {"email": email}, "full_name") or email)
			for email in did_not_reply]

		return dict(replies=replies,
			original_message=dws_group.message,
			title=_('Work Summary for {0}'.format(
				global_date_format(self.creation)
			)),
			did_not_reply=', '.join(did_not_reply) or '',
			did_not_reply_title=_('No replies from'))
Esempio n. 30
0
def get_blog_list(
	doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by=None
):
	conditions = []
	category = filters.blog_category or frappe.utils.escape_html(
		frappe.local.form_dict.blog_category or frappe.local.form_dict.category
	)
	if filters:
		if filters.blogger:
			conditions.append("t1.blogger=%s" % frappe.db.escape(filters.blogger))
	if category:
		conditions.append("t1.blog_category=%s" % frappe.db.escape(category))

	if txt:
		conditions.append(
			'(t1.content like {0} or t1.title like {0}")'.format(frappe.db.escape("%" + txt + "%"))
		)

	if conditions:
		frappe.local.no_cache = 1

	query = """\
		select
			t1.title, t1.name, t1.blog_category, t1.route, t1.published_on, t1.read_time,
				t1.published_on as creation,
				t1.read_time as read_time,
				t1.featured as featured,
				t1.meta_image as cover_image,
				t1.content as content,
				t1.content_type as content_type,
				t1.content_html as content_html,
				t1.content_md as content_md,
				ifnull(t1.blog_intro, t1.content) as intro,
				t2.full_name, t2.avatar, t1.blogger,
				(select count(name) from `tabComment`
					where
						comment_type='Comment'
						and reference_doctype='Blog Post'
						and reference_name=t1.name) as comments
		from `tabBlog Post` t1, `tabBlogger` t2
		where ifnull(t1.published,0)=1
		and t1.blogger = t2.name
		%(condition)s
		order by featured desc, published_on desc, name asc
		limit %(page_len)s OFFSET %(start)s""" % {
		"start": limit_start,
		"page_len": limit_page_length,
		"condition": (" and " + " and ".join(conditions)) if conditions else "",
	}

	posts = frappe.db.sql(query, as_dict=1)

	for post in posts:
		post.content = get_html_content_based_on_type(post, "content", post.content_type)
		if not post.cover_image:
			post.cover_image = find_first_image(post.content)
		post.published = global_date_format(post.creation)
		post.content = strip_html_tags(post.content)

		if not post.comments:
			post.comment_text = _("No comments yet")
		elif post.comments == 1:
			post.comment_text = _("1 comment")
		else:
			post.comment_text = _("{0} comments").format(str(post.comments))

		post.avatar = post.avatar or ""
		post.category = frappe.db.get_value(
			"Blog Category", post.blog_category, ["name", "route", "title"], as_dict=True
		)

		if (
			post.avatar
			and (not "http:" in post.avatar and not "https:" in post.avatar)
			and not post.avatar.startswith("/")
		):
			post.avatar = "/" + post.avatar

	return posts