Added doctypes and portal pages
This commit is contained in:
parent
48d9cfe304
commit
7b9e30914f
0
erpnext/crm/doctype/appointment/__init__.py
Normal file
0
erpnext/crm/doctype/appointment/__init__.py
Normal file
8
erpnext/crm/doctype/appointment/appointment.js
Normal file
8
erpnext/crm/doctype/appointment/appointment.js
Normal file
@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Appointment', {
|
||||
// refresh: function(frm) {
|
||||
|
||||
// }
|
||||
});
|
91
erpnext/crm/doctype/appointment/appointment.json
Normal file
91
erpnext/crm/doctype/appointment/appointment.json
Normal file
@ -0,0 +1,91 @@
|
||||
{
|
||||
"autoname": "format:APMT-{appointment_date}-{####}",
|
||||
"creation": "2019-08-27 10:48:27.926283",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"from_time",
|
||||
"to_time",
|
||||
"appointment_date",
|
||||
"customer_details_section",
|
||||
"customer_name",
|
||||
"customer_phone_number",
|
||||
"customer_skype",
|
||||
"customer_details"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "from_time",
|
||||
"fieldtype": "Time",
|
||||
"in_list_view": 1,
|
||||
"label": "From Time",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "to_time",
|
||||
"fieldtype": "Time",
|
||||
"in_list_view": 1,
|
||||
"label": "To Tme",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "appointment_date",
|
||||
"fieldtype": "Date",
|
||||
"in_list_view": 1,
|
||||
"label": "Date ",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "customer_details_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Customer Details"
|
||||
},
|
||||
{
|
||||
"fieldname": "customer_name",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Name",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "customer_phone_number",
|
||||
"fieldtype": "Data",
|
||||
"label": "Phone Number"
|
||||
},
|
||||
{
|
||||
"fieldname": "customer_skype",
|
||||
"fieldtype": "Data",
|
||||
"label": "Skype ID"
|
||||
},
|
||||
{
|
||||
"fieldname": "customer_details",
|
||||
"fieldtype": "Long Text",
|
||||
"label": "Details"
|
||||
}
|
||||
],
|
||||
"modified": "2019-08-27 12:43:30.143937",
|
||||
"modified_by": "Administrator",
|
||||
"module": "CRM",
|
||||
"name": "Appointment",
|
||||
"name_case": "UPPER CASE",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1
|
||||
}
|
10
erpnext/crm/doctype/appointment/appointment.py
Normal file
10
erpnext/crm/doctype/appointment/appointment.py
Normal file
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class Appointment(Document):
|
||||
pass
|
10
erpnext/crm/doctype/appointment/test_appointment.py
Normal file
10
erpnext/crm/doctype/appointment/test_appointment.py
Normal file
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# import frappe
|
||||
import unittest
|
||||
|
||||
class TestAppointment(unittest.TestCase):
|
||||
pass
|
@ -0,0 +1,18 @@
|
||||
// frappe.ui.form.on('Availability Of Slots', 'from_time', check_time)
|
||||
// frappe.ui.form.on('Availability Of Slots', 'to_time', check_time)
|
||||
|
||||
frappe.ui.form.on('Appointment Booking Settings', 'validate',check_times)
|
||||
function check_times(frm) {
|
||||
$.each(frm.doc.availability_of_slots || [], function (i, d) {
|
||||
let from_time = Date.parse('01/01/2019 ' + d.from_time);
|
||||
console.log(from_time);
|
||||
let to_time = Date.parse('01/01/2019 ' + d.to_time);
|
||||
if (from_time > to_time) {
|
||||
frappe.throw(__(`In row ${i + 1} of Availability Of Slots : "To Time" must be later than "From Time"`))
|
||||
}
|
||||
})
|
||||
}
|
||||
// function check_times(frm, cdt, cdn) {
|
||||
// let d = locals[cdt][cdn];
|
||||
//
|
||||
// }
|
@ -0,0 +1,72 @@
|
||||
{
|
||||
"creation": "2019-08-27 10:56:48.309824",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"availability_of_slots",
|
||||
"number_of_agents",
|
||||
"holiday_list",
|
||||
"email_reminders",
|
||||
"appointment_duration"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "availability_of_slots",
|
||||
"fieldtype": "Table",
|
||||
"label": "Availability Of Slots",
|
||||
"options": "Availability Of Slots",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "number_of_agents",
|
||||
"fieldtype": "Int",
|
||||
"in_list_view": 1,
|
||||
"label": "No. Of Agents",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "holiday_list",
|
||||
"fieldtype": "Link",
|
||||
"in_list_view": 1,
|
||||
"label": "Holiday List",
|
||||
"options": "Holiday List",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"fieldname": "email_reminders",
|
||||
"fieldtype": "Check",
|
||||
"label": "Email Reminders"
|
||||
},
|
||||
{
|
||||
"default": "60",
|
||||
"fieldname": "appointment_duration",
|
||||
"fieldtype": "Int",
|
||||
"label": "Appointment Duration",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"issingle": 1,
|
||||
"modified": "2019-08-27 17:32:46.208951",
|
||||
"modified_by": "Administrator",
|
||||
"module": "CRM",
|
||||
"name": "Appointment Booking Settings",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class AppointmentBookingSettings(Document):
|
||||
pass
|
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# import frappe
|
||||
import unittest
|
||||
|
||||
class TestAppointmentBookingSettings(unittest.TestCase):
|
||||
pass
|
@ -0,0 +1,46 @@
|
||||
{
|
||||
"creation": "2019-08-27 10:52:54.204677",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"day_of_week",
|
||||
"from_time",
|
||||
"to_time"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "day_of_week",
|
||||
"fieldtype": "Select",
|
||||
"in_list_view": 1,
|
||||
"label": "Day Of Week",
|
||||
"options": "Sunday\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaturday",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "from_time",
|
||||
"fieldtype": "Time",
|
||||
"in_list_view": 1,
|
||||
"label": "From Time ",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "to_time",
|
||||
"fieldtype": "Time",
|
||||
"in_list_view": 1,
|
||||
"label": "To Time",
|
||||
"reqd": 1
|
||||
}
|
||||
],
|
||||
"istable": 1,
|
||||
"modified": "2019-08-27 10:52:54.204677",
|
||||
"modified_by": "Administrator",
|
||||
"module": "CRM",
|
||||
"name": "Availabilty Of Slots",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"quick_entry": 1,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class AvailabilityOfSlots(Document):
|
||||
pass
|
0
erpnext/crm/doctype/timezone/__init__.py
Normal file
0
erpnext/crm/doctype/timezone/__init__.py
Normal file
10
erpnext/crm/doctype/timezone/test_timezone.py
Normal file
10
erpnext/crm/doctype/timezone/test_timezone.py
Normal file
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# See license.txt
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# import frappe
|
||||
import unittest
|
||||
|
||||
class TestTimezone(unittest.TestCase):
|
||||
pass
|
8
erpnext/crm/doctype/timezone/timezone.js
Normal file
8
erpnext/crm/doctype/timezone/timezone.js
Normal file
@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Timezone', {
|
||||
// refresh: function(frm) {
|
||||
|
||||
// }
|
||||
});
|
52
erpnext/crm/doctype/timezone/timezone.json
Normal file
52
erpnext/crm/doctype/timezone/timezone.json
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"autoname": "field:timezone_name",
|
||||
"creation": "2019-08-27 11:39:30.328670",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"offset",
|
||||
"timezone_name"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "offset",
|
||||
"fieldtype": "Int",
|
||||
"in_list_view": 1,
|
||||
"label": "Offset In Minutes",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "timezone_name",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "Name",
|
||||
"reqd": 1,
|
||||
"unique": 1
|
||||
}
|
||||
],
|
||||
"modified": "2019-08-27 11:39:30.328670",
|
||||
"modified_by": "Administrator",
|
||||
"module": "CRM",
|
||||
"name": "Timezone",
|
||||
"name_case": "Title Case",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"quick_entry": 1,
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1
|
||||
}
|
10
erpnext/crm/doctype/timezone/timezone.py
Normal file
10
erpnext/crm/doctype/timezone/timezone.py
Normal file
@ -0,0 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class Timezone(Document):
|
||||
pass
|
31
erpnext/www/book-appointment/1.html
Normal file
31
erpnext/www/book-appointment/1.html
Normal file
@ -0,0 +1,31 @@
|
||||
{% extends "templates/web.html" %}
|
||||
|
||||
{% block title %}{{ _("Book Appointment") }}{% endblock %}
|
||||
|
||||
{% block page_content %}
|
||||
<div class="container">
|
||||
<!-- title: Book an appointment -->
|
||||
<div class="text-center mb-5">
|
||||
<h3>Book an appointment</h3>
|
||||
<h4>Select the date and your timezone</h4>
|
||||
</div>
|
||||
<div class="row justify-content-center mt-3">
|
||||
<div class="col-md-4 align-self-center ">
|
||||
<form name="myform">
|
||||
<input type="date" name="appointment-date" id="appointment-date" class="form-control mt-3" min="{{ from_date }}" max="{{ to_date }}">
|
||||
<select name="appointment-timezone" id="appointment-timezone" class="form-control mt-3">
|
||||
{% if timezones %}
|
||||
{% for timezone in timezones%}
|
||||
<option value="{{timezone.offset}}">{{timezone.timezone_name}}</option>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</select>
|
||||
</form>
|
||||
<button class="form-control mt-3 btn btn-dark" id="next-button" onclick="next()">
|
||||
Next
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
14
erpnext/www/book-appointment/1.js
Normal file
14
erpnext/www/book-appointment/1.js
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
let holidays = [];
|
||||
{% if holidays %}
|
||||
holidays = {{holidays}}
|
||||
{% endif %}
|
||||
|
||||
function next() {
|
||||
let date = document.getElementsByName('appointment-date')[0].value;
|
||||
if(holidays.includes(date)){
|
||||
frappe.throw("That day is a holiday")
|
||||
}
|
||||
let tz = document.getElementsByName('appointment-timezone')[0].value;
|
||||
window.location = `/book-appointment/2?date=${date}&tz=${tz}`;
|
||||
}
|
17
erpnext/www/book-appointment/1.py
Normal file
17
erpnext/www/book-appointment/1.py
Normal file
@ -0,0 +1,17 @@
|
||||
import frappe
|
||||
|
||||
def get_context(context):
|
||||
settings = frappe.get_doc('Appointment Booking Settings')
|
||||
holiday_list = frappe.get_doc('Holiday List',settings.holiday_list)
|
||||
holidays = []
|
||||
for holiday in holiday_list.holidays:
|
||||
print(str(holiday.holiday_date))
|
||||
holidays.append(str(holiday.holiday_date))
|
||||
context.holidays = holidays
|
||||
context.from_date = holiday_list.from_date
|
||||
context.to_date = holiday_list.to_date
|
||||
timezones = frappe.get_all('Timezone',fields=["timezone_name","offset"])
|
||||
context.timezones = timezones
|
||||
|
||||
return context
|
||||
|
85
erpnext/www/book-appointment/2.html
Normal file
85
erpnext/www/book-appointment/2.html
Normal file
@ -0,0 +1,85 @@
|
||||
{% extends "templates/web.html" %}
|
||||
|
||||
{% block title %}{{ _("Book Appointment") }}{% endblock %}
|
||||
|
||||
{% block page_content %}
|
||||
<style>
|
||||
.time-slot {
|
||||
margin: 0 0;
|
||||
border: 0.5px solid #cccccc;
|
||||
min-height: 100px;
|
||||
}
|
||||
|
||||
.time-slot:hover {
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
.time-slot.unavailable {
|
||||
background: #bbb;
|
||||
|
||||
color: #777777
|
||||
}
|
||||
|
||||
input[type="radio"] {
|
||||
visibility: hidden;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.time-slot.selected {
|
||||
color: white;
|
||||
background: #5e64ff;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<div class="text-center mb-5">
|
||||
{% if is_holiday %}
|
||||
<h3> This day is a holiday</h3>
|
||||
{% else %}
|
||||
<h3>Pick A Time Slot</h3>
|
||||
<h4>Selected date is {{ date }}</h4>
|
||||
</div>
|
||||
<!-- Start of main content-->
|
||||
|
||||
<div class="mt-3 justify-content-center">
|
||||
<div class="row">
|
||||
<div class="col-md time-slot unavailable" id="12pm">12 pm to 1 am</div>
|
||||
<div class="col-md time-slot selected" id="1am">1 am to 2 am</div>
|
||||
<div class="col-md time-slot" id="2am">2 am to 3 am</div>
|
||||
<div class="col-md time-slot" id="3am">3 am to 4 am</div>
|
||||
<div class="col-md time-slot" id="4am">4 am to 5 am</div>
|
||||
<div class="col-md time-slot" id="5am">5 am to 6 am</div>
|
||||
<div class="col-md time-slot" id="6am">6 am to 7 am</div>
|
||||
<div class="col-md time-slot" id="7am">7 am to 8 am</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class=" col-md time-slot" id="8am">8 am to 9 am</div>
|
||||
<div class=" col-md time-slot" id="9am">9 am to 10 am</div>
|
||||
<div class=" col-md time-slot" id="10am">10 am to 11 am</div>
|
||||
<div class=" col-md time-slot" id="11am">11 am to 12 am</div>
|
||||
<div class=" col-md time-slot" id="12am">12 am to 1 pm</div>
|
||||
<div class=" col-md time-slot" id="1pm">1 pm to 2 pm</div>
|
||||
<div class=" col-md time-slot" id="2pm">2 pm to 3 pm</div>
|
||||
<div class=" col-md time-slot" id="3pm">3 pm to 4pm</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class=" col-md time-slot" id="4pm">4pm to 5pm</div>
|
||||
<div class=" col-md time-slot" id="5pm">5 pm to 6 pm</div>
|
||||
<div class=" col-md time-slot" id="6pm">6 pm to 7 pm</div>
|
||||
<div class=" col-md time-slot" id="7pm">7 pm to 8 pm</div>
|
||||
<div class=" col-md time-slot" id="8pm">8 pm to 9 pm</div>
|
||||
<div class=" col-md time-slot" id="9pm">9 pm to 10 pm</div>
|
||||
<div class=" col-md time-slot" id="10pm">10 pm to 11 pm</div>
|
||||
<div class=" col-md time-slot" id="11pm">11 pm to 12 pm</div>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-4 align-self-center">
|
||||
<button class="form-control mt-5 btn btn-dark" onclick="next()">
|
||||
Next
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<!-- End of main content -->
|
||||
{% endblock %}
|
27
erpnext/www/book-appointment/2.js
Normal file
27
erpnext/www/book-appointment/2.js
Normal file
@ -0,0 +1,27 @@
|
||||
let time_slot_divs = document.getElementsByClassName('time-slot');
|
||||
|
||||
function get_available_slots() {
|
||||
frappe.db
|
||||
}
|
||||
|
||||
function select_time() {
|
||||
if (this.classList.contains("unavailable")) {
|
||||
return
|
||||
}
|
||||
console.log(this.id)
|
||||
var selected = document.getElementsByClassName('selected')[0];
|
||||
selected.classList.remove('selected');
|
||||
this.classList.add('selected');
|
||||
}
|
||||
|
||||
for (var i = 0; i < time_slot_divs.length; i++) {
|
||||
time_slot_divs[i].addEventListener('click', select_time);
|
||||
}
|
||||
|
||||
function next() {
|
||||
let urlParams = new URLSearchParams(window.location.search);
|
||||
let date = urlParams.get("date");
|
||||
let tz = urlParams.get("tz");
|
||||
let time_slot = document.querySelector(".selected").id;
|
||||
window.location.href = `/book-appointment/3?date=${date}&tz=${tz}&time=${time_slot}`;
|
||||
}
|
28
erpnext/www/book-appointment/2.py
Normal file
28
erpnext/www/book-appointment/2.py
Normal file
@ -0,0 +1,28 @@
|
||||
import frappe
|
||||
import datetime
|
||||
|
||||
|
||||
def get_context(context):
|
||||
context.date = frappe.form_dict['date']
|
||||
settings = frappe.get_doc('Appointment Booking Settings')
|
||||
holiday_list = frappe.get_doc('Holiday List', settings.holiday_list)
|
||||
if(is_holiday(context.date,holiday_list)):
|
||||
context.is_holiday = True
|
||||
return context
|
||||
get_time_slots(context.date,settings)
|
||||
# time_slots = get_time_slots(date)
|
||||
return context
|
||||
|
||||
def is_holiday(date,holiday_list):
|
||||
for holiday in holiday_list.holidays:
|
||||
if holiday.holiday_date.isoformat() == date:
|
||||
print('matched')
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
|
||||
def _deltatime_to_time(deltatime):
|
||||
return (datetime.datetime.min + deltatime).time()
|
||||
|
||||
weekdays = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
|
22
erpnext/www/book-appointment/3.html
Normal file
22
erpnext/www/book-appointment/3.html
Normal file
@ -0,0 +1,22 @@
|
||||
{% extends "templates/web.html" %}
|
||||
|
||||
{% block title %}{{ _("Book Appointment") }}{% endblock %}
|
||||
|
||||
{% block page_content %}
|
||||
<div class="container">
|
||||
|
||||
<div class="text-center mb-5">
|
||||
<h3>Add details</h3>
|
||||
<h4>Selected date is {{ date }} at {{ time }}</h4>
|
||||
</div>
|
||||
<div class="row justify-content-center mt-3">
|
||||
<div class="col-md-4 align-items-center">
|
||||
<input class="form-control mt-3" type="text" name="customer_name" id="customer_name" placeholder="Your Name" required>
|
||||
<input class="form-control mt-3" type="tel" name="customer_number" id="customer_number" placeholder="Contact Number" required>
|
||||
<input class="form-control mt-3" type="text" name="customer_skype" id="customer_skype" placeholder="Skype" required>
|
||||
<textarea class="form-control mt-3" name="customer_notes" id="customer_notes" cols="30" rows="10" placeholder="Notes"></textarea>
|
||||
<button class="btn btn-primary form-control mt-3" onclick="submit()">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
11
erpnext/www/book-appointment/3.js
Normal file
11
erpnext/www/book-appointment/3.js
Normal file
@ -0,0 +1,11 @@
|
||||
function submit(){
|
||||
let params = new URLSearchParams(window.location.search);
|
||||
const date = params.get('date');
|
||||
const time = params.get('time');
|
||||
const tz = params.get('tz');
|
||||
const customer_name = document.getElementById('customer_name').value;
|
||||
const customer_number = document.getElementById('customer_number').value;
|
||||
const customer_skype = document.getElementById('customer_skype').value;
|
||||
const customer_notes = document.getElementById('customer_notes').value;
|
||||
console.log({date,time,tz,customer_name,customer_number,customer_skype,customer_notes});
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user