Skip to content
Open
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 133 additions & 1 deletion webshop/hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

required_apps = ["payments", "erpnext"]

web_include_css = "webshop-web.bundle.css"
web_include_css = ["webshop-web.bundle.css", "/assets/webshop/css/webshop-modern.css"]

web_include_js = "web.bundle.js"

Expand Down Expand Up @@ -72,7 +72,139 @@
},
}

scheduler_events = {
"hourly": [
"webshop.webshop.engagement.send_abandoned_cart_reminders",
]
}


has_website_permission = {
"Website Item": "webshop.webshop.doctype.website_item.website_item.has_website_permission_for_website_item",
"Item Group": "webshop.webshop.doctype.website_item.website_item.has_website_permission_for_item_group"
}

custom_fields = {
"Sales Order": [
{
"fieldname": "payment_method",
"label": "Payment Method",
"fieldtype": "Data",
"insert_after": "payment_gateway_account",
"read_only": 1,
"in_list_view": 1
},
{
"fieldname": "payment_review_section",
"label": "Webshop Payment Review",
"fieldtype": "Section Break",
"insert_after": "payment_method",
"collapsible": 1
},
{
"fieldname": "requires_payment_review",
"label": "Requires Payment Review",
"fieldtype": "Check",
"insert_after": "payment_review_section",
"read_only": 1,
"in_list_view": 1
},
{
"fieldname": "payment_review_status",
"label": "Payment Review Status",
"fieldtype": "Select",
"options": "\nPending Verification\nApproved\nRejected",
"insert_after": "requires_payment_review",
"read_only": 1,
"in_list_view": 1
},
{
"fieldname": "payment_receipt",
"label": "Payment Receipt",
"fieldtype": "Attach",
"insert_after": "payment_review_status",
"read_only": 1
},
{
"fieldname": "payment_review_notes",
"label": "Payment Review Notes",
"fieldtype": "Small Text",
"insert_after": "payment_receipt"
},
{
"fieldname": "payment_review_column_break",
"fieldtype": "Column Break",
"insert_after": "payment_review_notes"
},
{
"fieldname": "payment_reviewed_by",
"label": "Payment Reviewed By",
"fieldtype": "Link",
"options": "User",
"insert_after": "payment_review_column_break",
"read_only": 1
},
{
"fieldname": "payment_reviewed_on",
"label": "Payment Reviewed On",
"fieldtype": "Datetime",
"insert_after": "payment_reviewed_by",
"read_only": 1
}
],
"Webshop Settings": [
{
"fieldname": "conversion_section",
"label": "Conversion Boosters",
"fieldtype": "Section Break",
"insert_after": "redirect_on_action",
"collapsible": 1
},
{
"fieldname": "delivery_promise_text",
"label": "Delivery Promise Text",
"fieldtype": "Data",
"insert_after": "conversion_section",
"default": "Delivery in 2-4 working days"
},
{
"fieldname": "returns_promise_text",
"label": "Returns / Support Promise Text",
"fieldtype": "Data",
"insert_after": "delivery_promise_text",
"default": "Easy exchange and support after purchase"
},
{
"fieldname": "first_order_coupon_code",
"label": "First Order Coupon Code",
"fieldtype": "Data",
"insert_after": "returns_promise_text"
},
{
"fieldname": "first_order_coupon_text",
"label": "First Order Coupon Text",
"fieldtype": "Data",
"insert_after": "first_order_coupon_code",
"default": "Use this code on your first order"
},
{
"fieldname": "conversion_column_break",
"fieldtype": "Column Break",
"insert_after": "first_order_coupon_text"
},
{
"fieldname": "low_stock_threshold",
"label": "Low Stock Threshold",
"fieldtype": "Int",
"insert_after": "conversion_column_break",
"default": "5"
},
{
"fieldname": "enable_exit_intent_recovery",
"label": "Enable Exit Intent Cart Recovery",
"fieldtype": "Check",
"insert_after": "low_stock_threshold",
"default": "1"
}
]
}
6 changes: 5 additions & 1 deletion webshop/patches.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@

webshop.patches.add_homepage_field #09-05-2024
webshop.patches.enable_allow_to_guest_view_for_item_group
webshop.patches.clear_cache_for_item_group_route
webshop.patches.clear_cache_for_item_group_route
webshop.patches.add_payment_review_fields
webshop.patches.add_website_item_badge_fields
webshop.patches.add_abandoned_cart_fields
webshop.patches.add_conversion_settings_fields
41 changes: 41 additions & 0 deletions webshop/patches/add_abandoned_cart_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import frappe
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields


def execute():
create_custom_fields(
{
"Quotation": [
{
"fieldname": "abandoned_cart_section",
"label": "Abandoned Cart Recovery",
"fieldtype": "Section Break",
"insert_after": "contact_email",
"collapsible": 1,
},
{
"fieldname": "abandoned_cart_reminder_sent",
"label": "Abandoned Cart Reminder Sent",
"fieldtype": "Check",
"insert_after": "abandoned_cart_section",
"read_only": 1,
},
{
"fieldname": "abandoned_cart_last_reminder_on",
"label": "Last Reminder On",
"fieldtype": "Datetime",
"insert_after": "abandoned_cart_reminder_sent",
"read_only": 1,
},
{
"fieldname": "abandoned_cart_reminder_count",
"label": "Reminder Count",
"fieldtype": "Int",
"insert_after": "abandoned_cart_last_reminder_on",
"read_only": 1,
},
]
},
ignore_validate=True,
)
frappe.clear_cache(doctype="Quotation")
69 changes: 69 additions & 0 deletions webshop/patches/add_conversion_settings_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
import frappe


def get_fields():
return {
"Webshop Settings": [
{
"fieldname": "conversion_section",
"label": "Conversion Boosters",
"fieldtype": "Section Break",
"insert_after": "redirect_on_action",
"collapsible": 1,
},
{
"fieldname": "delivery_promise_text",
"label": "Delivery Promise Text",
"fieldtype": "Data",
"insert_after": "conversion_section",
"default": "Delivery in 2-4 working days",
},
{
"fieldname": "returns_promise_text",
"label": "Returns / Support Promise Text",
"fieldtype": "Data",
"insert_after": "delivery_promise_text",
"default": "Easy exchange and support after purchase",
},
{
"fieldname": "first_order_coupon_code",
"label": "First Order Coupon Code",
"fieldtype": "Data",
"insert_after": "returns_promise_text",
},
{
"fieldname": "first_order_coupon_text",
"label": "First Order Coupon Text",
"fieldtype": "Data",
"insert_after": "first_order_coupon_code",
"default": "Use this code on your first order",
},
{
"fieldname": "conversion_column_break",
"fieldtype": "Column Break",
"insert_after": "first_order_coupon_text",
},
{
"fieldname": "low_stock_threshold",
"label": "Low Stock Threshold",
"fieldtype": "Int",
"insert_after": "conversion_column_break",
"default": "5",
},
{
"fieldname": "enable_exit_intent_recovery",
"label": "Enable Exit Intent Cart Recovery",
"fieldtype": "Check",
"insert_after": "low_stock_threshold",
"default": "1",
},
]
}


def execute():
create_custom_fields(get_fields(), ignore_validate=True)
if frappe.db.get_single_value("Webshop Settings", "enable_exit_intent_recovery") is None:
frappe.db.set_single_value("Webshop Settings", "enable_exit_intent_recovery", 1)
frappe.clear_cache(doctype="Webshop Settings")
78 changes: 78 additions & 0 deletions webshop/patches/add_payment_review_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import frappe
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields


def execute():
create_custom_fields(
{
"Sales Order": [
{
"fieldname": "payment_method",
"label": "Payment Method",
"fieldtype": "Data",
"insert_after": "currency",
"read_only": 1,
"in_list_view": 1,
},
{
"fieldname": "payment_review_section",
"label": "Webshop Payment Review",
"fieldtype": "Section Break",
"insert_after": "payment_method",
"collapsible": 1,
},
{
"fieldname": "requires_payment_review",
"label": "Requires Payment Review",
"fieldtype": "Check",
"insert_after": "payment_review_section",
"read_only": 1,
"in_list_view": 1,
},
{
"fieldname": "payment_review_status",
"label": "Payment Review Status",
"fieldtype": "Select",
"options": "\nPending Verification\nApproved\nRejected",
"insert_after": "requires_payment_review",
"read_only": 1,
"in_list_view": 1,
},
{
"fieldname": "payment_receipt",
"label": "Payment Receipt",
"fieldtype": "Attach",
"insert_after": "payment_review_status",
"read_only": 1,
},
{
"fieldname": "payment_review_notes",
"label": "Payment Review Notes",
"fieldtype": "Small Text",
"insert_after": "payment_receipt",
},
{
"fieldname": "payment_review_column_break",
"fieldtype": "Column Break",
"insert_after": "payment_review_notes",
},
{
"fieldname": "payment_reviewed_by",
"label": "Payment Reviewed By",
"fieldtype": "Link",
"options": "User",
"insert_after": "payment_review_column_break",
"read_only": 1,
},
{
"fieldname": "payment_reviewed_on",
"label": "Payment Reviewed On",
"fieldtype": "Datetime",
"insert_after": "payment_reviewed_by",
"read_only": 1,
},
]
},
ignore_validate=True,
)
frappe.clear_cache(doctype="Sales Order")
41 changes: 41 additions & 0 deletions webshop/patches/add_website_item_badge_fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import frappe
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields


def execute():
create_custom_fields(
{
"Website Item": [
{
"fieldname": "badge_section",
"label": "Product Badge",
"fieldtype": "Section Break",
"insert_after": "slideshow",
"collapsible": 1,
},
{
"fieldname": "badge_label",
"label": "Badge Label",
"fieldtype": "Data",
"insert_after": "badge_section",
"description": "Example: New Arrival, Bestseller, Food Grade, Sale",
},
{
"fieldname": "badge_color",
"label": "Badge Color",
"fieldtype": "Color",
"insert_after": "badge_label",
"default": "#B0008E",
},
{
"fieldname": "badge_priority",
"label": "Badge Priority",
"fieldtype": "Int",
"insert_after": "badge_color",
"description": "Higher priority badges can be used for sorting or future campaigns.",
},
]
},
ignore_validate=True,
)
frappe.clear_cache(doctype="Website Item")
Loading