diff --git a/inn/inn_hotels/doctype/inn_reservation/inn_reservation_card.py b/inn/inn_hotels/doctype/inn_reservation/inn_reservation_card.py
new file mode 100644
index 0000000..dba372b
--- /dev/null
+++ b/inn/inn_hotels/doctype/inn_reservation/inn_reservation_card.py
@@ -0,0 +1,32 @@
+import frappe
+from datetime import date
+
+
+@frappe.whitelist()
+def get_card_number_expected_departure():
+ today = date.today().isoformat()
+ data = frappe.db.count("Inn Reservation", {"status": ["!=", "Finish"], "expected_departure": today})
+
+ result = {
+ "value": data,
+ "fieldtype": "Int",
+ "route_options": {"expected_departure": today, "status": ["!=", "Finish"]},
+ "route": ["inn-reservation"]
+ }
+
+ return result
+
+
+@frappe.whitelist()
+def get_card_number_expected_arrival():
+ today = date.today().isoformat()
+ data = frappe.db.count("Inn Reservation", {"status": ["!=", "In House"], "expected_arrival": today})
+
+ result = {
+ "value": data,
+ "fieldtype": "Int",
+ "route_options": {"expected_arrival": today, "status": ["!=", "In House"]},
+ "route": ["inn-reservation"]
+ }
+
+ return result
\ No newline at end of file
diff --git a/inn/inn_hotels/doctype/inn_room_booking/inn_room_card_owner_webcard.py b/inn/inn_hotels/doctype/inn_room_booking/inn_room_card_owner_webcard.py
new file mode 100644
index 0000000..e076ca0
--- /dev/null
+++ b/inn/inn_hotels/doctype/inn_room_booking/inn_room_card_owner_webcard.py
@@ -0,0 +1,266 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2020, Core Initiative and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.document import Document
+from dateutil.parser import parse
+from datetime import date, timedelta
+
+def count_all_room(start_date, end_date):
+ default_availability = frappe.db.count("Inn Room")
+ try:
+ start_date = parse(start_date, False).date()
+ except ValueError:
+ raise frappe.ValidationError("{start_date} is not a valid date string")
+
+ try:
+ end_date = parse(end_date, False).date()
+ except ValueError:
+ raise frappe.ValidationError("{end_date} is not a valid date string")
+
+ delta = end_date - start_date
+ if delta.days < 0:
+ raise frappe.ValidationError("start date must before end date")
+
+ return default_availability * delta.days
+
+@frappe.whitelist()
+def count_sold_room(start_date = None, end_date=None):
+ if start_date == None and end_date == None:
+ start_date = date.today().isoformat()
+ end_date = date.today() + timedelta(days=1)
+ end_date = end_date.isoformat()
+
+
+ try:
+ start_date = parse(start_date, False).date()
+ except ValueError:
+ raise frappe.ValidationError("{start_date} is not a valid date string")
+
+ try:
+ end_date = parse(end_date, False).date()
+ except ValueError:
+ raise frappe.ValidationError("{end_date} is not a valid date string")
+
+ delta = end_date - start_date
+ if delta.days < 0:
+ raise frappe.ValidationError("start date must before end date")
+
+
+ total_sold = 0
+ # calculate reservation start before start_date and reservation end after start date
+ current_sold = frappe.db.get_values(doctype="Inn Room Booking", filters={"start": ["<", start_date], "end": [">", start_date], "room_availability": "Room Sold"}, fieldname=["start", "end"], as_dict=True)
+ for ii in current_sold:
+ room_end_date = ii.end
+ if room_end_date > end_date:
+ room_end_date = end_date
+
+ days_sold = (room_end_date - start_date).days
+ total_sold += days_sold
+
+
+ # calculate reservation start after start_date and reservations start before before_date
+ current_sold = frappe.db.get_values(doctype="Inn Room Booking", filters=[["start", "between", [start_date, end_date]], ["room_availability", "=", "Room Sold"]], fieldname=["start", "end"], as_dict=True)
+ for ii in current_sold:
+ room_start_date = ii.start
+ room_end_date = ii.end
+ if room_end_date > end_date:
+ room_end_date = end_date
+
+ days_sold = (room_end_date - room_start_date).days
+ total_sold += days_sold
+
+ return {
+ "value": total_sold,
+ "fieldtype": "Int"
+ }
+
+@frappe.whitelist()
+def count_available_room(start_date=None, end_date=None):
+ if start_date == None and end_date == None:
+ start_date = date.today().isoformat()
+ end_date = date.today() + timedelta(days=1)
+ end_date = end_date.isoformat()
+
+
+ default_availability = frappe.db.count("Inn Room")
+ try:
+ start_date = parse(start_date, False).date()
+ except ValueError:
+ raise frappe.ValidationError("{start_date} is not a valid date string")
+
+ try:
+ end_date = parse(end_date, False).date()
+ except ValueError:
+ raise frappe.ValidationError("{end_date} is not a valid date string")
+
+ delta = end_date - start_date
+ if delta.days < 0:
+ raise frappe.ValidationError("start date must before end date")
+
+
+ all_room = default_availability * delta.days
+
+ total_sold = 0
+ # calculate reservation start before start_date and reservation end after start date
+ current_used = frappe.db.get_values(doctype="Inn Room Booking", filters={"start": ["<", start_date], "end": [">", start_date]}, fieldname=["start", "end"], as_dict=True)
+ for ii in current_used:
+ room_end_date = ii.end
+ if room_end_date > end_date:
+ room_end_date = end_date
+
+ days_sold = (room_end_date - start_date).days
+ total_sold += days_sold
+
+
+ # calculate reservation start after start_date and reservations start before before_date
+ current_used = frappe.db.get_values(doctype="Inn Room Booking", filters=[["start", "between", [start_date, end_date]]], fieldname=["start", "end"], as_dict=True)
+ for ii in current_used:
+ room_start_date = ii.start
+ room_end_date = ii.end
+ if room_end_date > end_date:
+ room_end_date = end_date
+
+ days_sold = (room_end_date - room_start_date).days
+ total_sold += days_sold
+
+ return {
+ "value": all_room - total_sold,
+ "fieldtype": "Int"
+ }
+
+@frappe.whitelist()
+def count_ooo_room(start_date=None, end_date=None):
+ if start_date == None and end_date == None:
+ start_date = date.today().isoformat()
+ end_date = date.today() + timedelta(days=1)
+ end_date = end_date.isoformat()
+
+
+ try:
+ start_date = parse(start_date, False)
+ except ValueError:
+ raise frappe.ValidationError("{start_date} is not a valid date string")
+
+ try:
+ end_date = parse(end_date, False)
+ except ValueError:
+ raise frappe.ValidationError("{end_date} is not a valid date string")
+
+ delta = end_date - start_date
+ if delta.days < 0:
+ raise frappe.ValidationError("start date must before end date")
+
+
+ total_sold = 0
+ # calculate reservation start before start_date and reservation end after start date
+ current_ooo = frappe.db.get_values(doctype="Inn Room Booking", filters={"start": ["<", start_date], "end": [">", start_date], "room_availability": "Out of Order"}, fieldname=["start", "end"], as_dict=True)
+ for ii in current_ooo:
+ room_end_date = ii.end
+ if room_end_date > end_date:
+ room_end_date = end_date
+
+ days_sold = (room_end_date - start_date).days
+ total_sold += days_sold
+
+
+ # calculate reservation start after start_date and reservations start before before_date
+ current_ooo = frappe.db.get_values(doctype="Inn Room Booking", filters=[["start", "between", [start_date, end_date]], ["room_availability", "=", "Out of Order"]], fieldname=["start", "end"], as_dict=True)
+ for ii in current_ooo:
+ room_start_date = ii.start
+ room_end_date = ii.end
+ if room_end_date > end_date:
+ room_end_date = end_date
+
+ days_sold = (room_end_date - room_start_date).days
+ total_sold += days_sold
+
+ return {
+ "value": total_sold,
+ "fieldtype": "Int"
+ }
+
+def calculate_total_rate_and_sold(start_date, end_date):
+ try:
+ start_date = parse(start_date, False).date()
+ except ValueError:
+ raise frappe.ValidationError("{start_date} is not a valid date string")
+
+ try:
+ end_date = parse(end_date, False).date()
+ except ValueError:
+ raise frappe.ValidationError("{end_date} is not a valid date string")
+
+ delta = end_date - start_date
+ if delta.days < 0:
+ raise frappe.ValidationError("start date must before end date")
+
+ total_sold = 0
+ total_rate = 0
+ cached_rate = {}
+ # calculate reservation start before start_date and reservation end after start date
+ current_sold = frappe.db.get_values(doctype="Inn Reservation", filters={"arrival": ["<", start_date], "expected_departure": [">", start_date]}, fieldname=["arrival", "expected_departure", "room_rate"], as_dict=True)
+ for ii in current_sold:
+ room_end_date = ii.expected_departure
+ if room_end_date > end_date:
+ room_end_date = end_date
+
+ days_sold = (room_end_date - start_date).days
+ total_sold += days_sold
+
+ if ii.room_rate not in cached_rate:
+ room_rate = frappe.db.get_value(doctype="Inn Room Rate", filters={"name": ii.room_rate}, fieldname="final_total_rate_amount")
+ cached_rate[ii.room_rate] = room_rate.final_total_rate_amount
+
+ total_rate = cached_rate[ii.room_rate] * days_sold
+
+
+ # calculate reservation start after start_date and reservations start before before_date
+ current_sold = frappe.db.get_values(doctype="Inn Reservation", filters=[["expected_arrival", "between", [start_date, end_date]]], fieldname=["expected_arrival", "expected_departure", "room_rate"], as_dict=True)
+ for ii in current_sold:
+ room_start_date = ii.expected_arrival
+ room_end_date = ii.expected_departure
+ if room_end_date > end_date:
+ room_end_date = end_date
+
+ days_sold = (room_end_date - room_start_date).days
+ total_sold += days_sold
+
+
+ if ii.room_rate not in cached_rate:
+ room_rate = frappe.db.get_value(doctype="Inn Room Rate", filters={"name": ii.room_rate}, fieldname="final_total_rate_amount")
+ cached_rate[ii.room_rate] = room_rate
+ total_rate += cached_rate[ii.room_rate] * days_sold
+
+ return total_rate, total_sold
+
+@frappe.whitelist()
+def calculate_average_rate(start_date=None, end_date=None):
+ if start_date == None and end_date == None:
+ start_date = date.today().isoformat()
+ end_date = date.today() + timedelta(days=1)
+ end_date = end_date.isoformat()
+ total_rate, total_sold = calculate_total_rate_and_sold(start_date, end_date)
+ if total_sold == 0:
+ value = 0
+ else:
+ value = total_rate / total_sold
+
+ return {
+ "value": value,
+ "fieldtype": "Currency"
+ }
+
+@frappe.whitelist()
+def calculate_total_rate(start_date=None, end_date=None):
+ if start_date == None and end_date == None:
+ start_date = date.today().isoformat()
+ end_date = date.today() + timedelta(days=1)
+ end_date = end_date.isoformat()
+ total_rate, _ = calculate_total_rate_and_sold(start_date, end_date)
+ return {
+ "value": total_rate,
+ "fieldtype": "Int"
+ }
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/arrival/arrival.json b/inn/inn_hotels/number_card/arrival/arrival.json
new file mode 100644
index 0000000..4078ee3
--- /dev/null
+++ b/inn/inn_hotels/number_card/arrival/arrival.json
@@ -0,0 +1,22 @@
+{
+ "color": "#ECAD4B",
+ "creation": "2024-02-22 13:27:29.372728",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "filters_json": "null",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Arrival",
+ "method": "inn.inn_hotels.doctype.inn_reservation.inn_reservation_card.get_card_number_expected_arrival",
+ "modified": "2024-02-22 13:52:18.349937",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Arrival",
+ "owner": "Administrator",
+ "report_function": "Sum",
+ "show_percentage_stats": 1,
+ "stats_time_interval": "Daily",
+ "type": "Custom"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_hotel_aar_room_sold/inn_hotel_aar_room_sold.json b/inn/inn_hotels/number_card/inn_hotel_aar_room_sold/inn_hotel_aar_room_sold.json
new file mode 100644
index 0000000..d30e090
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_hotel_aar_room_sold/inn_hotel_aar_room_sold.json
@@ -0,0 +1,23 @@
+{
+ "color": "#B4CD29",
+ "creation": "2024-02-22 14:19:41.547594",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "filters_config": "[{\n fieldname: \"start_date\",\n label: \"Start Date\", \n fieldtype: \"Date\",\n reqd: 1\n}, {\n fieldname: \"end_date\",\n label: \"End Date\",\n fieldtype: \"Date\",\n reqd: 1\n}]",
+ "filters_json": "{}",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Hotel AAR Room Sold",
+ "method": "inn.inn_hotels.doctype.inn_room_booking.inn_room_card_owner_webcard.calculate_average_rate",
+ "modified": "2024-02-22 14:20:11.160526",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Hotel AAR Room Sold",
+ "owner": "Administrator",
+ "report_function": "Sum",
+ "show_percentage_stats": 1,
+ "stats_time_interval": "Daily",
+ "type": "Custom"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_hotel_available_room/inn_hotel_available_room.json b/inn/inn_hotels/number_card/inn_hotel_available_room/inn_hotel_available_room.json
new file mode 100644
index 0000000..8ed5856
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_hotel_available_room/inn_hotel_available_room.json
@@ -0,0 +1,23 @@
+{
+ "color": "#4F9DD9",
+ "creation": "2024-02-22 14:18:15.704194",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "filters_config": "[{\n fieldname: \"start_date\",\n label: \"Start Date\", \n fieldtype: \"Date\",\n reqd: 1\n}, {\n fieldname: \"end_date\",\n label: \"End Date\",\n fieldtype: \"Date\",\n reqd: 1\n}]",
+ "filters_json": "{}",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Hotel Available Room",
+ "method": "inn.inn_hotels.doctype.inn_room_booking.inn_room_card_owner_webcard.count_available_room",
+ "modified": "2024-02-22 14:26:58.050253",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Hotel Available Room",
+ "owner": "Administrator",
+ "report_function": "Sum",
+ "show_percentage_stats": 1,
+ "stats_time_interval": "Daily",
+ "type": "Custom"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_hotel_expected_departure/inn_hotel_expected_departure.json b/inn/inn_hotels/number_card/inn_hotel_expected_departure/inn_hotel_expected_departure.json
new file mode 100644
index 0000000..208227e
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_hotel_expected_departure/inn_hotel_expected_departure.json
@@ -0,0 +1,22 @@
+{
+ "color": "#CB2929",
+ "creation": "2024-02-22 13:52:41.666131",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "filters_json": "null",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Hotel Expected Departure",
+ "method": "inn.inn_hotels.doctype.inn_reservation.inn_reservation_card.get_card_number_expected_departure",
+ "modified": "2024-02-22 13:52:47.344662",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Hotel Expected Departure",
+ "owner": "Administrator",
+ "report_function": "Sum",
+ "show_percentage_stats": 1,
+ "stats_time_interval": "Daily",
+ "type": "Custom"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_hotel_out_of_order_room/inn_hotel_out_of_order_room.json b/inn/inn_hotels/number_card/inn_hotel_out_of_order_room/inn_hotel_out_of_order_room.json
new file mode 100644
index 0000000..ce030c9
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_hotel_out_of_order_room/inn_hotel_out_of_order_room.json
@@ -0,0 +1,23 @@
+{
+ "color": "#CB2929",
+ "creation": "2024-02-22 14:19:05.566491",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "filters_config": "[{\n fieldname: \"start_date\",\n label: \"Start Date\", \n fieldtype: \"Date\",\n reqd: 1\n}, {\n fieldname: \"end_date\",\n label: \"End Date\",\n fieldtype: \"Date\",\n reqd: 1\n}]",
+ "filters_json": "{}",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Hotel Out of Order Room",
+ "method": "inn.inn_hotels.doctype.inn_room_booking.inn_room_card_owner_webcard.count_ooo_room",
+ "modified": "2024-02-22 14:19:05.566491",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Hotel Out of Order Room",
+ "owner": "Administrator",
+ "report_function": "Sum",
+ "show_percentage_stats": 1,
+ "stats_time_interval": "Daily",
+ "type": "Custom"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_hotel_total_room_rate_sold/inn_hotel_total_room_rate_sold.json b/inn/inn_hotels/number_card/inn_hotel_total_room_rate_sold/inn_hotel_total_room_rate_sold.json
new file mode 100644
index 0000000..2251834
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_hotel_total_room_rate_sold/inn_hotel_total_room_rate_sold.json
@@ -0,0 +1,23 @@
+{
+ "color": "#B4CD29",
+ "creation": "2024-02-22 14:20:48.773195",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "filters_config": "[{\n fieldname: \"start_date\",\n label: \"Start Date\", \n fieldtype: \"Date\",\n reqd: 1\n}, {\n fieldname: \"end_date\",\n label: \"End Date\",\n fieldtype: \"Date\",\n reqd: 1\n}]",
+ "filters_json": "{}",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Hotel Total Room Rate Sold",
+ "method": "inn.inn_hotels.doctype.inn_room_booking.inn_room_card_owner_webcard.calculate_total_rate",
+ "modified": "2024-02-22 14:20:52.035188",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Hotel Total Room Rate Sold",
+ "owner": "Administrator",
+ "report_function": "Sum",
+ "show_percentage_stats": 1,
+ "stats_time_interval": "Daily",
+ "type": "Custom"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_hotel_total_room_sold/inn_hotel_total_room_sold.json b/inn/inn_hotels/number_card/inn_hotel_total_room_sold/inn_hotel_total_room_sold.json
new file mode 100644
index 0000000..1782476
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_hotel_total_room_sold/inn_hotel_total_room_sold.json
@@ -0,0 +1,23 @@
+{
+ "color": "#29CD42",
+ "creation": "2024-02-22 14:09:07.947730",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "filters_config": "[{\n fieldname: \"start_date\",\n label: \"Start Date\", \n fieldtype: \"Date\",\n reqd: 1\n}, {\n fieldname: \"end_date\",\n label: \"End Date\",\n fieldtype: \"Date\",\n reqd: 1\n}]",
+ "filters_json": "{}",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Hotel Total Room Sold",
+ "method": "inn.inn_hotels.doctype.inn_room_booking.inn_room_card_owner_webcard.count_sold_room",
+ "modified": "2024-02-22 14:17:32.135413",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Hotel Total Room Sold",
+ "owner": "Administrator",
+ "report_function": "Sum",
+ "show_percentage_stats": 1,
+ "stats_time_interval": "Daily",
+ "type": "Custom"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_room_clean/inn_room_clean.json b/inn/inn_hotels/number_card/inn_room_clean/inn_room_clean.json
new file mode 100644
index 0000000..d447361
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_room_clean/inn_room_clean.json
@@ -0,0 +1,25 @@
+{
+ "aggregate_function_based_on": "",
+ "color": "#29CD42",
+ "creation": "2024-02-15 10:49:01.017490",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "document_type": "Inn Room",
+ "dynamic_filters_json": "[]",
+ "filters_json": "[[\"Inn Room\",\"room_status\",\"in\",[\"Vacant Clean\",\"Occupied Clean\",null],false]]",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Room Clean",
+ "modified": "2024-02-22 19:10:22.680125",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Room Clean",
+ "owner": "Administrator",
+ "parent_document_type": "",
+ "report_function": "Sum",
+ "show_percentage_stats": 0,
+ "stats_time_interval": "Daily",
+ "type": "Document Type"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_room_dirty/inn_room_dirty.json b/inn/inn_hotels/number_card/inn_room_dirty/inn_room_dirty.json
new file mode 100644
index 0000000..e3c09b8
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_room_dirty/inn_room_dirty.json
@@ -0,0 +1,25 @@
+{
+ "aggregate_function_based_on": "",
+ "color": "#ECAD4B",
+ "creation": "2024-02-22 11:19:08.977767",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "document_type": "Inn Room",
+ "dynamic_filters_json": "[]",
+ "filters_json": "[[\"Inn Room\",\"room_status\",\"in\",[\"Vacant Dirty\",\"Occupied Dirty\",null],false]]",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Room Dirty",
+ "modified": "2024-02-22 19:10:35.593176",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Room Dirty",
+ "owner": "Administrator",
+ "parent_document_type": "",
+ "report_function": "Sum",
+ "show_percentage_stats": 0,
+ "stats_time_interval": "Daily",
+ "type": "Document Type"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_room_not_available/inn_room_not_available.json b/inn/inn_hotels/number_card/inn_room_not_available/inn_room_not_available.json
new file mode 100644
index 0000000..109a412
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_room_not_available/inn_room_not_available.json
@@ -0,0 +1,25 @@
+{
+ "aggregate_function_based_on": "",
+ "color": "#CB2929",
+ "creation": "2024-02-22 11:20:39.257569",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "document_type": "Inn Room Booking",
+ "dynamic_filters_json": "[]",
+ "filters_json": "[[\"Inn Room Booking\",\"room_availability\",\"in\",[\"Out of Order\",\"Under Construction\",null],false],[\"Inn Room Booking\",\"status\",\"!=\",\"Finished\",false]]",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Room Not Available",
+ "modified": "2024-02-22 19:10:37.708974",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Room Not Available",
+ "owner": "Administrator",
+ "parent_document_type": "",
+ "report_function": "Sum",
+ "show_percentage_stats": 0,
+ "stats_time_interval": "Daily",
+ "type": "Document Type"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/number_card/inn_room_ready/inn_room_ready.json b/inn/inn_hotels/number_card/inn_room_ready/inn_room_ready.json
new file mode 100644
index 0000000..7754d32
--- /dev/null
+++ b/inn/inn_hotels/number_card/inn_room_ready/inn_room_ready.json
@@ -0,0 +1,25 @@
+{
+ "aggregate_function_based_on": "",
+ "color": "#29CD42",
+ "creation": "2024-02-22 11:17:21.807333",
+ "docstatus": 0,
+ "doctype": "Number Card",
+ "document_type": "Inn Room",
+ "dynamic_filters_json": "[]",
+ "filters_json": "[[\"Inn Room\",\"room_status\",\"=\",\"Vacant Ready\",false]]",
+ "function": "Count",
+ "idx": 0,
+ "is_public": 0,
+ "is_standard": 1,
+ "label": "Inn Room Ready",
+ "modified": "2024-02-22 19:10:09.233112",
+ "modified_by": "Administrator",
+ "module": "Inn Hotels",
+ "name": "Inn Room Ready",
+ "owner": "Administrator",
+ "parent_document_type": "",
+ "report_function": "Sum",
+ "show_percentage_stats": 0,
+ "stats_time_interval": "Daily",
+ "type": "Document Type"
+}
\ No newline at end of file
diff --git a/inn/inn_hotels/workspace/operations/operations.json b/inn/inn_hotels/workspace/operations/operations.json
index da13126..97456f1 100644
--- a/inn/inn_hotels/workspace/operations/operations.json
+++ b/inn/inn_hotels/workspace/operations/operations.json
@@ -1,6 +1,6 @@
{
"charts": [],
- "content": "[{\"id\":\"i7DzVS_nkY\",\"type\":\"header\",\"data\":{\"text\":\"Operation Management\",\"col\":12}},{\"id\":\"Gi2GP3MT6X\",\"type\":\"card\",\"data\":{\"card_name\":\"Housekeeping\",\"col\":4}},{\"id\":\"_L-N8SbO58\",\"type\":\"card\",\"data\":{\"card_name\":\"Master Data\",\"col\":4}},{\"id\":\"4QGFFgwgVI\",\"type\":\"card\",\"data\":{\"card_name\":\"Transaction Config\",\"col\":4}}]",
+ "content": "[{\"id\":\"i7DzVS_nkY\",\"type\":\"header\",\"data\":{\"text\":\"Operation Management\",\"col\":12}},{\"id\":\"EpO3dCM01u\",\"type\":\"header\",\"data\":{\"text\":\"House Keeping Room Status\",\"col\":12}},{\"id\":\"OZB3uvBCDs\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Ready\",\"col\":3}},{\"id\":\"eVIAAPoNTT\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Clean\",\"col\":3}},{\"id\":\"fRbcanV6Aa\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Dirty\",\"col\":3}},{\"id\":\"s3jTK677fD\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Not Available\",\"col\":3}},{\"id\":\"mP4DTk4p76\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"Gi2GP3MT6X\",\"type\":\"card\",\"data\":{\"card_name\":\"Housekeeping\",\"col\":4}},{\"id\":\"_L-N8SbO58\",\"type\":\"card\",\"data\":{\"card_name\":\"Master Data\",\"col\":4}},{\"id\":\"4QGFFgwgVI\",\"type\":\"card\",\"data\":{\"card_name\":\"Transaction Config\",\"col\":4}}]",
"creation": "2023-12-15 14:57:37.238569",
"custom_blocks": [],
"docstatus": 0,
@@ -197,11 +197,28 @@
"type": "Link"
}
],
- "modified": "2024-02-16 13:26:50.425136",
+ "modified": "2024-02-22 11:21:15.729238",
"modified_by": "Administrator",
"module": "Inn Hotels",
"name": "Operations",
- "number_cards": [],
+ "number_cards": [
+ {
+ "label": "Not Available",
+ "number_card_name": "Inn Room Not Available"
+ },
+ {
+ "label": "Ready",
+ "number_card_name": "Inn Room Ready"
+ },
+ {
+ "label": "Dirty",
+ "number_card_name": "Inn Room Dirty"
+ },
+ {
+ "label": "Clean",
+ "number_card_name": "Inn Room Clean"
+ }
+ ],
"owner": "Administrator",
"parent_page": "Home",
"public": 1,
diff --git a/inn/inn_hotels/workspace/reservation/reservation.json b/inn/inn_hotels/workspace/reservation/reservation.json
index c80c06e..716cfa6 100644
--- a/inn/inn_hotels/workspace/reservation/reservation.json
+++ b/inn/inn_hotels/workspace/reservation/reservation.json
@@ -1,6 +1,6 @@
{
"charts": [],
- "content": "[{\"id\":\"mQhBeS--Rl\",\"type\":\"header\",\"data\":{\"text\":\"Reservation\",\"col\":12}},{\"id\":\"BxqoGNVQ4q\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Inn House\",\"col\":3}},{\"id\":\"NjOnJ7GpSF\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Check Out\",\"col\":3}},{\"id\":\"lf4XkzibVt\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"x8GJwV8hzM\",\"type\":\"card\",\"data\":{\"card_name\":\"Transaction\",\"col\":4}},{\"id\":\"-GtWnq-goz\",\"type\":\"card\",\"data\":{\"card_name\":\"City Ledger\",\"col\":4}},{\"id\":\"8XQ43ifBk4\",\"type\":\"card\",\"data\":{\"card_name\":\"Night Audit\",\"col\":4}}]",
+ "content": "[{\"id\":\"mQhBeS--Rl\",\"type\":\"header\",\"data\":{\"text\":\"Reservation\",\"col\":12}},{\"id\":\"BxqoGNVQ4q\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Inn House\",\"col\":3}},{\"id\":\"wZnRYcYnXv\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Arrival\",\"col\":3}},{\"id\":\"wtb_GqbdIZ\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Departure\",\"col\":3}},{\"id\":\"NjOnJ7GpSF\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Check Out\",\"col\":3}},{\"id\":\"nrjSQoFUDF\",\"type\":\"header\",\"data\":{\"text\":\"Room Sold\",\"col\":12}},{\"id\":\"Ik_PvcF5sO\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Total Sold\",\"col\":4}},{\"id\":\"WsrVm9DRLn\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Available\",\"col\":4}},{\"id\":\"4UtfBl96nC\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Out of Order\",\"col\":4}},{\"id\":\"eAOak1AJ_L\",\"type\":\"header\",\"data\":{\"text\":\"Room Revenue Summary\",\"col\":12}},{\"id\":\"sKu5ru_37L\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"ARR\",\"col\":6}},{\"id\":\"mxvXiLXtkU\",\"type\":\"number_card\",\"data\":{\"number_card_name\":\"Total Sold\",\"col\":6}},{\"id\":\"lf4XkzibVt\",\"type\":\"spacer\",\"data\":{\"col\":12}},{\"id\":\"x8GJwV8hzM\",\"type\":\"card\",\"data\":{\"card_name\":\"Transaction\",\"col\":4}},{\"id\":\"-GtWnq-goz\",\"type\":\"card\",\"data\":{\"card_name\":\"City Ledger\",\"col\":4}},{\"id\":\"8XQ43ifBk4\",\"type\":\"card\",\"data\":{\"card_name\":\"Night Audit\",\"col\":4}}]",
"creation": "2023-12-15 13:51:19.164024",
"custom_blocks": [],
"docstatus": 0,
@@ -138,15 +138,39 @@
"type": "Link"
}
],
- "modified": "2024-02-16 13:26:49.991944",
+ "modified": "2024-02-22 19:09:03.891400",
"modified_by": "Administrator",
"module": "Inn Hotels",
"name": "Reservation",
"number_cards": [
+ {
+ "label": "Arrival",
+ "number_card_name": "Arrival"
+ },
+ {
+ "label": "Total Sold",
+ "number_card_name": "Inn Hotel Total Room Sold"
+ },
+ {
+ "label": "Available",
+ "number_card_name": "Inn Hotel Available Room"
+ },
+ {
+ "label": "Out of Order",
+ "number_card_name": "Inn Hotel Out of Order Room"
+ },
{
"label": "Inn House",
"number_card_name": "Inn House"
},
+ {
+ "label": "ARR",
+ "number_card_name": "Inn Hotel AAR Room Sold"
+ },
+ {
+ "label": "Departure",
+ "number_card_name": "Inn Hotel Expected Departure"
+ },
{
"label": "Check Out",
"number_card_name": "Check Out"