fix: carry forwarded allocation period validation
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
index 0c00aff..f7db7de 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
@@ -19,19 +19,19 @@
 	def validate(self):
 		self.validate_period()
 		self.validate_lwp()
+		set_employee_name(self)
+		self.set_total_leaves_allocated()
 		self.validate_allocation_overlap()
 		self.validate_back_dated_allocation()
 		self.validate_total_leaves_allocated()
-		set_employee_name(self)
 		self.validate_leaves_allocated_value()
 		self.validate_leave_allocation_days()
-		self.set_total_leaves_allocated()
 
 	def validate_leave_allocation_days(self):
-		new_leaves = self.new_leaves_allocate if not self.carry_forward else self.carry_forwarded_leaves
+		new_leaves = self.new_leaves_allocated if not self.carry_forward else self.carry_forwarded_leaves
 		max_leaves, leaves_allocated = self.get_max_leaves_with_leaves_allocated_for_leave_type(flt(new_leaves))
 
-		if leave_allocated > max_leaves:
+		if leaves_allocated > max_leaves:
 			frappe.throw(_("Total allocated leaves are more days than maximum allocation of {0} leave type for employee {1} in the period")\
 			.format(self.leave_type, self.employee))
 
@@ -52,8 +52,9 @@
 		# check if the allocation period is more than the expiry allows for carry forwarded allocation
 		if self.carry_forward:
 			expiry_days = get_days_to_expiry_for_leave_type(self.leave_type)
-			if allocation_period > expiry_days:
-				frappe.throw(_("Leave allocation period cannot be more than the expiry days allocated"))
+
+			if allocation_period > flt(expiry_days) and expiry_days:
+				frappe.throw(_("Leave allocation period cannot exceed carry forward expiry limit"))
 
 	def validate_lwp(self):
 		if frappe.db.get_value("Leave Type", self.leave_type, "is_lwp"):
@@ -109,7 +110,7 @@
 	def validate_total_leaves_allocated(self):
 		# Adding a day to include To Date in the difference
 		date_difference = date_diff(self.to_date, self.from_date) + 1
-		if date_difference < self.total_leaves_allocated:
+		if date_difference < flt(self.total_leaves_allocated):
 			frappe.throw(_("Total allocated leaves are more than days in the period"), OverAllocationError)
 
 	def validate_against_leave_applications(self):
@@ -133,13 +134,13 @@
 	def get_max_leaves_with_leaves_allocated_for_leave_type(self, new_leaves):
 		''' compare new leaves allocated with max leaves '''
 		company = frappe.db.get_value("Employee", self.employee, "company")
+		leaves_allocated = 0
 		leave_period = get_leave_period(self.from_date, self.to_date, company)
 		max_leaves_allowed = frappe.db.get_value("Leave Type", self.leave_type, "max_leaves_allowed")
 		if max_leaves_allowed > 0:
-			leave_allocated = 0
 			if leave_period:
-				leave_allocated = get_leave_allocation_for_period(self.employee, self.leave_type, leave_period[0].from_date, leave_period[0].to_date)
-			leave_allocated += new_leaves
+				leaves_allocated = get_leave_allocation_for_period(self.employee, self.leave_type, leave_period[0].from_date, leave_period[0].to_date)
+			leaves_allocated += new_leaves
 		return max_leaves_allowed, leaves_allocated
 
 def get_leave_allocation_for_period(employee, leave_type, from_date, to_date):
@@ -184,12 +185,12 @@
 		"docstatus": 1,
 		"to_date": ("<", date)
 	}
-	limit = 1
+	limit = 2
 
 	# check number of days to expire, ignore expiry for default value 0
 	if expiry_days:
 		filters.update(carry_forward=0)
-		limit = 2
+		limit = 1
 
 	previous_allocation = frappe.get_all("Leave Allocation",
 		filters=filters,
@@ -207,12 +208,10 @@
 
 def get_days_to_expiry_for_leave_type(leave_type):
 	''' returns days to expiry for a provided leave type '''
-	expiry_days = frappe.db.get_value("Leave Type",
-		filters={"leave_type": leave_type, "is_carry_forward": 1},
+	return frappe.db.get_value("Leave Type",
+		filters={"leave_type_name": leave_type, "is_carry_forward": 1},
 		fieldname="carry_forward_leave_expiry")
 
-
-
 def validate_carry_forward(leave_type):
 	if not frappe.db.get_value("Leave Type", leave_type, "is_carry_forward"):
 		frappe.throw(_("Leave Type {0} cannot be carry-forwarded").format(leave_type))
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_period/leave_period.py b/erpnext/hr/doctype/leave_period/leave_period.py
index 0c83a1e..a6198a8 100644
--- a/erpnext/hr/doctype/leave_period/leave_period.py
+++ b/erpnext/hr/doctype/leave_period/leave_period.py
@@ -120,6 +120,9 @@
 	return allocation.name
 
 def create_carry_forward_leaves_allocation(employee, leave_type, leave_type_details, leave_period, carry_forward_leaves):
+	carry_forwarded_leaves = get_carry_forwarded_leaves(employee, leave_type, leave_period.from_date)
+	if not carry_forwarded_leaves:
+		return
 	allocation = frappe.new_doc("Leave Allocation")
 	allocation.employee = employee
 	allocation.leave_type = leave_type
@@ -127,6 +130,6 @@
 	allocation.to_date = add_days(leave_period.from_date, leave_type_details.carry_forward_leave_expiry) if not leave_type_details.carry_forward_leave_expiry else leave_period.to_date
 	allocation.leave_period = leave_period.name
 	allocation.carry_forward = carry_forward_leaves
-	allocation.carry_forwarded_leaves = get_carry_forwarded_leaves(employee, leave_type, leave_period.from_date)
+	allocation.carry_forwarded_leaves = carry_forwarded_leaves
 	allocation.save(ignore_permissions=True)
 	allocation.submit()
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_type/leave_type.py b/erpnext/hr/doctype/leave_type/leave_type.py
index da21f78..dcae5fe 100644
--- a/erpnext/hr/doctype/leave_type/leave_type.py
+++ b/erpnext/hr/doctype/leave_type/leave_type.py
@@ -15,6 +15,6 @@
 			self.validate_carry_forward()
 
 	def validate_carry_forward(self):
-		max_days = 366 if calendar.isleap(datetime.now().year) else 365
+		max_days = 367 if calendar.isleap(datetime.now().year) else 366
 		if not (0 <= self.carry_forward_leave_expiry <= max_days):
-			frappe.throw(_('Invalid entry!! Carried forward days need to expire within a year'))
+			frappe.throw(_('Invalid entry!! Carried forward days need to expire within a year'))
\ No newline at end of file