diff --git a/erpnext/locale/fr.po b/erpnext/locale/fr.po
index c17c0ffb233514accb0d95b6ecf3d8c9d738ef55..1960f34de4cbc9ee5c11adc003848185ba828926 100644
--- a/erpnext/locale/fr.po
+++ b/erpnext/locale/fr.po
@@ -57483,7 +57483,7 @@ msgstr "Cette commande contient des articles récurrents et est liée à l'abonn
#: selling/doctype/sales_order/sales_order.js:599
msgid "This order contains some recurring items.
A subscription will be automatically generated on submission if a recurring period is set."
-msgstr "Cette commande contient des articles récurrents.
Un abonnement sera automatiquement généré à la validation si une période de récurrence est définie."
+msgstr "Cette commande contient des articles récurrents.
Un abonnement ne sera automatiquement généré à la validation que si une période de récurrence est définie."
#: accounts/report/bank_transaction_categories/bank_transaction_categories.js:22
msgid "This quarter"
diff --git a/erpnext/venue/doctype/booking_credit_type/booking_credit_type.json b/erpnext/venue/doctype/booking_credit_type/booking_credit_type.json
index 3e49be94486671c11f55a64bed4d6ac942338014..1be16c4d0db614cbc63a32e9799a2dd474a94198 100644
--- a/erpnext/venue/doctype/booking_credit_type/booking_credit_type.json
+++ b/erpnext/venue/doctype/booking_credit_type/booking_credit_type.json
@@ -105,7 +105,7 @@
"link_fieldname": "booking_credit_type"
}
],
- "modified": "2023-03-20 14:55:21.418044",
+ "modified": "2024-11-26 16:39:32.210780",
"modified_by": "Administrator",
"module": "Venue",
"name": "Booking Credit Type",
@@ -124,9 +124,22 @@
"select": 1,
"share": 1,
"write": 1
+ },
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Venue Manager",
+ "select": 1,
+ "share": 1,
+ "write": 1
}
],
"sort_field": "modified",
"sort_order": "DESC",
"states": []
-}
\ No newline at end of file
+}
diff --git a/erpnext/venue/doctype/booking_credit_type/booking_credit_type.py b/erpnext/venue/doctype/booking_credit_type/booking_credit_type.py
index 65ad370660f0e6fa77b8d99d87caeff9b9c3c53a..a423ee3ee35856de4f7082fb9ba007ccbf3592f5 100644
--- a/erpnext/venue/doctype/booking_credit_type/booking_credit_type.py
+++ b/erpnext/venue/doctype/booking_credit_type/booking_credit_type.py
@@ -5,6 +5,27 @@ from frappe.model.document import Document
class BookingCreditType(Document):
+ # begin: auto-generated types
+ # This code is auto-generated. Do not modify anything in this block.
+
+ from typing import TYPE_CHECKING
+
+ if TYPE_CHECKING:
+ from frappe.types import DF
+
+ from erpnext.venue.doctype.booking_credit_type_conversions.booking_credit_type_conversions import (
+ BookingCreditTypeConversions,
+ )
+
+ conversion_table: DF.Table[BookingCreditTypeConversions]
+ credits: DF.Int
+ disabled: DF.Check
+ item: DF.Link
+ label: DF.Data
+ uom: DF.Link
+ validity: DF.Duration | None
+ # end: auto-generated types
+
def validate(self):
self.validate_conversions()
diff --git a/erpnext/venue/doctype/booking_credit_type_conversions/booking_credit_type_conversions.json b/erpnext/venue/doctype/booking_credit_type_conversions/booking_credit_type_conversions.json
index 75ed1d322b46dbd2e6ff9114266643f5bfff0aef..c6a8bd3c5d6d14ddebaa5c73f1af92dff9f77fd8 100644
--- a/erpnext/venue/doctype/booking_credit_type_conversions/booking_credit_type_conversions.json
+++ b/erpnext/venue/doctype/booking_credit_type_conversions/booking_credit_type_conversions.json
@@ -40,7 +40,7 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
- "modified": "2023-03-20 16:28:44.165045",
+ "modified": "2024-11-26 16:38:52.196041",
"modified_by": "Administrator",
"module": "Venue",
"name": "Booking Credit Type Conversions",
@@ -49,4 +49,4 @@
"sort_field": "modified",
"sort_order": "DESC",
"states": []
-}
\ No newline at end of file
+}
diff --git a/erpnext/venue/doctype/booking_credit_type_conversions/booking_credit_type_conversions.py b/erpnext/venue/doctype/booking_credit_type_conversions/booking_credit_type_conversions.py
index 151e1c776c6d30aecf46f89d2321e4f93fbeaf10..71cc503047536395ea5046a946020748a1674f63 100644
--- a/erpnext/venue/doctype/booking_credit_type_conversions/booking_credit_type_conversions.py
+++ b/erpnext/venue/doctype/booking_credit_type_conversions/booking_credit_type_conversions.py
@@ -5,4 +5,20 @@ import frappe
from frappe.model.document import Document
class BookingCreditTypeConversions(Document):
+ # begin: auto-generated types
+ # This code is auto-generated. Do not modify anything in this block.
+
+ from typing import TYPE_CHECKING
+
+ if TYPE_CHECKING:
+ from frappe.types import DF
+
+ credits: DF.Int
+ item: DF.Link
+ parent: DF.Data
+ parentfield: DF.Data
+ parenttype: DF.Data
+ uom: DF.Link
+ # end: auto-generated types
+
pass
diff --git a/erpnext/venue/doctype/item_booking/item_booking.py b/erpnext/venue/doctype/item_booking/item_booking.py
index 1c73db2072181a9859a95330fa8642457383419f..d999f4502cf290eb0082ec03fa86eb57da54c052 100644
--- a/erpnext/venue/doctype/item_booking/item_booking.py
+++ b/erpnext/venue/doctype/item_booking/item_booking.py
@@ -786,6 +786,21 @@ def get_availabilities(
).get_available_slots()
+def _parse_date_or_datetime(s: str):
+ from frappe.utils.data import convert_utc_to_system_timezone
+
+ if isinstance(s, str):
+ if s.endswith("Z"):
+ d = get_datetime(s.rstrip("Z"))
+ d = convert_utc_to_system_timezone(d)
+ return d.replace(tzinfo=None)
+
+ if len(s) <= 10:
+ return datetime.datetime.strptime(s, "%Y-%m-%d")
+
+ return get_datetime(s)
+
+
class ItemBookingAvailabilities:
def __init__(
self,
@@ -802,16 +817,8 @@ class ItemBookingAvailabilities:
self.start = start
self.end = end
self.limit = int(limit)
- self.init = (
- datetime.datetime.strptime(self.start, "%Y-%m-%d")
- if isinstance(self.start, str)
- else get_datetime(self.start)
- )
- self.finish = (
- datetime.datetime.strptime(self.end, "%Y-%m-%d")
- if isinstance(self.end, str)
- else get_datetime(self.end)
- )
+ self.init = _parse_date_or_datetime(self.start)
+ self.finish = _parse_date_or_datetime(self.end)
self.user = user or frappe.session.user
if user == "*" and not frappe.has_permission("Item Booking", "read"):
@@ -1021,7 +1028,13 @@ class ItemBookingAvailabilities:
slots.extend(self._get_all_slots(line, simultaneous_booking_allowed))
for slot in slots:
- output.append(self.get_available_dict(slot))
+ out = self.get_available_dict(slot)
+ try:
+ count = get_booking_count(self.item, out.get("start"), out.get("end"))
+ out.remaining = count.get("remaining")
+ except Exception:
+ pass
+ output.append(out)
for scheduled_item in user_scheduled_items:
added = False