Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions beams/beams/custom_scripts/project/project.js
Original file line number Diff line number Diff line change
Expand Up @@ -239,23 +239,28 @@ frappe.ui.form.on('Project', {
}
}


frappe.ui.form.on('Required Items Table', {
required_item: function(frm, cdt, cdn) {

let row = locals[cdt][cdn]
let row = locals[cdt][cdn];
if (row.required_item) {

frappe.call({
method: "beams.beams.custom_scripts.project.project.get_available_quantities",
args: {
items: JSON.stringify([row.required_item])
items: JSON.stringify([row.required_item]),
source_name: frm.doc.name
},
callback: function (r) {
callback: function(r) {
if (r.message) {
frappe.model.set_value(cdt, cdn, 'available_quantity', r.message[row.required_item] || 0);
if (r.message._error) {
frappe.model.set_value(cdt, cdn, 'available_quantity', 0);
} else {
frappe.model.set_value(cdt, cdn, 'available_quantity', r.message[row.required_item] || 0);
}
}
}
});
}
}
});
});

12 changes: 10 additions & 2 deletions beams/beams/custom_scripts/project/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ def create_equipment_request(source_name, equipment_data, required_from, require

return request_doc.name


@frappe.whitelist()
def get_available_quantities(items, source_name=None):
"""Returns available quantities for specified items based on location from Project or Beams Admin Settings."""
Expand All @@ -296,19 +297,26 @@ def get_available_quantities(items, source_name=None):
frappe.throw("Items should be a list.")

location = None

if source_name:
location = frappe.db.get_value("Project", source_name, "asset_location")

if not location:
location = frappe.db.get_single_value("Beams Admin Settings", "default_asset_location")

if not location:
frappe.throw("Asset location not configured in Project or Beams Admin Settings.")
frappe.msgprint("Asset location not configured in Project or Beams Admin Settings.")
return {"_error": "Asset location not configured in Project or Beams Admin Settings."}


result = {}
for item in items:
if item:
quantity = frappe.db.count("Asset", {"item_code": item, "location": location})
quantity = frappe.db.count("Asset", {
"item_code": item,
"location": location,
"docstatus": 1
})
result[item] = quantity or 0

return result