mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-15 03:01:22 +00:00
Merge pull request #53224 from diptanilsaha/missed_ta
This commit is contained in:
@@ -1154,7 +1154,7 @@ def get_irequests_of_payment_request(doc: str | None = None) -> list:
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_available_payment_schedules(reference_doctype, reference_name):
|
def get_available_payment_schedules(reference_doctype: str, reference_name: str):
|
||||||
ref_doc = frappe.get_doc(reference_doctype, reference_name)
|
ref_doc = frappe.get_doc(reference_doctype, reference_name)
|
||||||
|
|
||||||
if not hasattr(ref_doc, "payment_schedule") or not ref_doc.payment_schedule:
|
if not hasattr(ref_doc, "payment_schedule") or not ref_doc.payment_schedule:
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import math
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
|
from frappe.model.document import Document
|
||||||
from frappe.query_builder.functions import IfNull, Sum
|
from frappe.query_builder.functions import IfNull, Sum
|
||||||
from frappe.utils import (
|
from frappe.utils import (
|
||||||
cint,
|
cint,
|
||||||
@@ -986,7 +987,7 @@ class Asset(AccountsController):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_depreciation_rate(self, args, on_validate=False):
|
def get_depreciation_rate(self, args: str | dict | Document, on_validate: bool = False):
|
||||||
if isinstance(args, str):
|
if isinstance(args, str):
|
||||||
args = json.loads(args)
|
args = json.loads(args)
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ def update_asset_maintenance_log_status():
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@frappe.validate_and_sanitize_search_inputs
|
@frappe.validate_and_sanitize_search_inputs
|
||||||
def get_maintenance_tasks(doctype, txt, searchfield, start, page_len, filters):
|
def get_maintenance_tasks(doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict):
|
||||||
asset_maintenance_tasks = frappe.db.get_values(
|
asset_maintenance_tasks = frappe.db.get_values(
|
||||||
"Asset Maintenance Task", {"parent": filters.get("asset_maintenance")}, "maintenance_task"
|
"Asset Maintenance Task", {"parent": filters.get("asset_maintenance")}, "maintenance_task"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2130,7 +2130,7 @@ def make_stock_reservation_entries(
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def cancel_stock_reservation_entries(doc, sre_list):
|
def cancel_stock_reservation_entries(doc: str | dict, sre_list: str | list):
|
||||||
if isinstance(doc, str):
|
if isinstance(doc, str):
|
||||||
doc = parse_json(doc)
|
doc = parse_json(doc)
|
||||||
doc = frappe.get_doc("Work Order", doc.get("name"))
|
doc = frappe.get_doc("Work Order", doc.get("name"))
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ class ProductBundle(Document):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@frappe.validate_and_sanitize_search_inputs
|
@frappe.validate_and_sanitize_search_inputs
|
||||||
def get_new_item_code(doctype, txt, searchfield, start, page_len, filters):
|
def get_new_item_code(doctype: str, txt: str, searchfield: str, start: int, page_len: int, filters: dict):
|
||||||
product_bundles = frappe.db.get_list("Product Bundle", {"disabled": 0}, pluck="name")
|
product_bundles = frappe.db.get_list("Product Bundle", {"disabled": 0}, pluck="name")
|
||||||
|
|
||||||
if not searchfield or searchfield == "name":
|
if not searchfield or searchfield == "name":
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ def get_leaderboards():
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_all_customers(date_range, company, field, limit=None):
|
def get_all_customers(date_range: str, company: str, field: str, limit: int | None = None):
|
||||||
filters = [["docstatus", "=", "1"], ["company", "=", company]]
|
filters = [["docstatus", "=", "1"], ["company", "=", company]]
|
||||||
from_date, to_date = parse_date_range(date_range)
|
from_date, to_date = parse_date_range(date_range)
|
||||||
if field == "outstanding_amount":
|
if field == "outstanding_amount":
|
||||||
@@ -89,7 +89,7 @@ def get_all_customers(date_range, company, field, limit=None):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_all_items(date_range, company, field, limit=None):
|
def get_all_items(date_range: str, company: str, field: str, limit: int | None = None):
|
||||||
if field in ("available_stock_qty", "available_stock_value"):
|
if field in ("available_stock_qty", "available_stock_value"):
|
||||||
sum_field = "actual_qty" if field == "available_stock_qty" else "stock_value"
|
sum_field = "actual_qty" if field == "available_stock_qty" else "stock_value"
|
||||||
results = frappe.db.get_all(
|
results = frappe.db.get_all(
|
||||||
@@ -135,7 +135,7 @@ def get_all_items(date_range, company, field, limit=None):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_all_suppliers(date_range, company, field, limit=None):
|
def get_all_suppliers(date_range: str, company: str, field: str, limit: int | None = None):
|
||||||
filters = [["docstatus", "=", "1"], ["company", "=", company]]
|
filters = [["docstatus", "=", "1"], ["company", "=", company]]
|
||||||
from_date, to_date = parse_date_range(date_range)
|
from_date, to_date = parse_date_range(date_range)
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ def get_all_suppliers(date_range, company, field, limit=None):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_all_sales_partner(date_range, company, field, limit=None):
|
def get_all_sales_partner(date_range: str, company: str, field: str, limit: int | None = None):
|
||||||
if field == "total_sales_amount":
|
if field == "total_sales_amount":
|
||||||
select_field = "base_net_total"
|
select_field = "base_net_total"
|
||||||
elif field == "total_commission":
|
elif field == "total_commission":
|
||||||
@@ -196,7 +196,7 @@ def get_all_sales_partner(date_range, company, field, limit=None):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_all_sales_person(date_range, company, field=None, limit=0):
|
def get_all_sales_person(date_range: str, company: str, field: str | None = None, limit: int | None = None):
|
||||||
filters = [
|
filters = [
|
||||||
["docstatus", "=", "1"],
|
["docstatus", "=", "1"],
|
||||||
["company", "=", company],
|
["company", "=", company],
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ def auto_fetch_serial_number(
|
|||||||
posting_date: str | None = None,
|
posting_date: str | None = None,
|
||||||
batch_nos: str | list[str] | None = None,
|
batch_nos: str | list[str] | None = None,
|
||||||
for_doctype: str | None = None,
|
for_doctype: str | None = None,
|
||||||
exclude_sr_nos=None,
|
exclude_sr_nos: str | None = None,
|
||||||
) -> list[str]:
|
) -> list[str]:
|
||||||
filters = frappe._dict({"item_code": item_code, "warehouse": warehouse})
|
filters = frappe._dict({"item_code": item_code, "warehouse": warehouse})
|
||||||
|
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ class Issue(Document):
|
|||||||
communication.save()
|
communication.save()
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def split_issue(self, subject, communication_id):
|
def split_issue(self, subject: str, communication_id: str):
|
||||||
# Bug: Pressing enter doesn't send subject
|
# Bug: Pressing enter doesn't send subject
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
|
|||||||
@@ -427,7 +427,7 @@ def get_customer_territory(customer):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_service_level_agreement_filters(doctype, name, customer=None):
|
def get_service_level_agreement_filters(doctype: str, name: str, customer: str | None = None):
|
||||||
if not frappe.db.get_single_value("Support Settings", "track_service_level_agreement"):
|
if not frappe.db.get_single_value("Support Settings", "track_service_level_agreement"):
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -780,7 +780,7 @@ def get_response_and_resolution_duration(doc):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def reset_service_level_agreement(doctype: str, docname: str, reason, user):
|
def reset_service_level_agreement(doctype: str, docname: str, reason: str, user: str):
|
||||||
if not frappe.db.get_single_value("Support Settings", "allow_resetting_service_level_agreement"):
|
if not frappe.db.get_single_value("Support Settings", "allow_resetting_service_level_agreement"):
|
||||||
frappe.throw(_("Allow Resetting Service Level Agreement from Support Settings."))
|
frappe.throw(_("Allow Resetting Service Level Agreement from Support Settings."))
|
||||||
|
|
||||||
@@ -1034,7 +1034,7 @@ def get_tz(user):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_user_time(user, to_string=False):
|
def get_user_time(user: str, to_string: bool = False):
|
||||||
return get_datetime_str(now_datetime(user)) if to_string else now_datetime(user)
|
return get_datetime_str(now_datetime(user)) if to_string else now_datetime(user)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class CallLog(Document):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def add_call_summary_and_call_type(call_log, summary, call_type):
|
def add_call_summary_and_call_type(call_log: str, summary: str, call_type: str):
|
||||||
doc = frappe.get_doc("Call Log", call_log)
|
doc = frappe.get_doc("Call Log", call_log)
|
||||||
doc.type_of_call = call_type
|
doc.type_of_call = call_type
|
||||||
doc.save()
|
doc.save()
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ def get_tasks(project, start=0, search=None, item_status=None):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_task_html(project, start=0, item_status=None):
|
def get_task_html(project: str, start: int = 0, item_status: str | None = None):
|
||||||
return frappe.render_template(
|
return frappe.render_template(
|
||||||
"erpnext/templates/includes/projects/project_tasks.html",
|
"erpnext/templates/includes/projects/project_tasks.html",
|
||||||
{
|
{
|
||||||
@@ -105,7 +105,7 @@ def get_timesheets(project, start=0, search=None):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_timesheet_html(project, start=0):
|
def get_timesheet_html(project: str, start: int = 0):
|
||||||
return frappe.render_template(
|
return frappe.render_template(
|
||||||
"erpnext/templates/includes/projects/project_timesheets.html",
|
"erpnext/templates/includes/projects/project_timesheets.html",
|
||||||
{"doc": {"timesheets": get_timesheets(project, start)}},
|
{"doc": {"timesheets": get_timesheets(project, start)}},
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ def get_context(context):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
@frappe.whitelist(allow_guest=True)
|
||||||
def get_help_results_sections(text):
|
def get_help_results_sections(text: str):
|
||||||
out = []
|
out = []
|
||||||
settings = frappe.get_doc("Support Settings", "Support Settings")
|
settings = frappe.get_doc("Support Settings", "Support Settings")
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from frappe.utils import escape_html
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
@frappe.whitelist(allow_guest=True)
|
||||||
def send_message(sender, message, subject="Website Query"):
|
def send_message(sender: str, message: str, subject: str = "Website Query"):
|
||||||
from frappe.www.contact import send_message as website_send_message
|
from frappe.www.contact import send_message as website_send_message
|
||||||
|
|
||||||
website_send_message(sender, message, subject)
|
website_send_message(sender, message, subject)
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ def get_timezones():
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
@frappe.whitelist(allow_guest=True)
|
||||||
def get_appointment_slots(date, timezone):
|
def get_appointment_slots(date: str, timezone: str):
|
||||||
# Convert query to local timezones
|
# Convert query to local timezones
|
||||||
format_string = "%Y-%m-%d %H:%M:%S"
|
format_string = "%Y-%m-%d %H:%M:%S"
|
||||||
query_start_time = datetime.datetime.strptime(date + " 00:00:00", format_string)
|
query_start_time = datetime.datetime.strptime(date + " 00:00:00", format_string)
|
||||||
@@ -92,7 +92,7 @@ def get_available_slots_between(query_start_time, query_end_time, settings):
|
|||||||
|
|
||||||
|
|
||||||
@frappe.whitelist(allow_guest=True)
|
@frappe.whitelist(allow_guest=True)
|
||||||
def create_appointment(date, time, tz, contact):
|
def create_appointment(date: str, time: str, tz: str, contact: str):
|
||||||
format_string = "%Y-%m-%d %H:%M:%S"
|
format_string = "%Y-%m-%d %H:%M:%S"
|
||||||
scheduled_time = datetime.datetime.strptime(date + " " + time, format_string)
|
scheduled_time = datetime.datetime.strptime(date + " " + time, format_string)
|
||||||
# Strip tzinfo from datetime objects since it's handled by the doctype
|
# Strip tzinfo from datetime objects since it's handled by the doctype
|
||||||
|
|||||||
Reference in New Issue
Block a user