mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-22 06:29:20 +00:00
refactor: improve translatability in buying controller (2)
Added full stops and support for custom fieldnames. Improved wording.
This commit is contained in:
@@ -224,15 +224,17 @@ class BuyingController(SubcontractingController):
|
|||||||
for item in self.get("items"):
|
for item in self.get("items"):
|
||||||
if item.get("from_warehouse") and (item.get("from_warehouse") == item.get("warehouse")):
|
if item.get("from_warehouse") and (item.get("from_warehouse") == item.get("warehouse")):
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Row #{idx}: Accepted Warehouse and Supplier Warehouse cannot be same").format(
|
_("Row #{idx}: {from_warehouse_field} and {to_warehouse_field} cannot be same.").format(
|
||||||
idx=item.idx
|
idx=item.idx,
|
||||||
|
from_warehouse_field=_(item.meta.get_label("from_warehouse")),
|
||||||
|
to_warehouse_field=_(item.meta.get_label("warehouse")),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if item.get("from_warehouse") and self.get("is_subcontracted"):
|
if item.get("from_warehouse") and self.get("is_subcontracted"):
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_(
|
_(
|
||||||
"Row #{idx}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor"
|
"Row #{idx}: Cannot select Supplier Warehouse while suppling raw materials to subcontractor."
|
||||||
).format(idx=item.idx)
|
).format(idx=item.idx)
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -378,7 +380,7 @@ class BuyingController(SubcontractingController):
|
|||||||
d.rate = d.sales_incoming_rate
|
d.rate = d.sales_incoming_rate
|
||||||
frappe.msgprint(
|
frappe.msgprint(
|
||||||
_(
|
_(
|
||||||
"Row #{idx}: Item rate has been updated as per valuation rate since its an internal stock transfer"
|
"Row #{idx}: Item rate has been updated as per valuation rate since its an internal stock transfer."
|
||||||
).format(idx=d.idx),
|
).format(idx=d.idx),
|
||||||
alert=1,
|
alert=1,
|
||||||
)
|
)
|
||||||
@@ -430,15 +432,15 @@ class BuyingController(SubcontractingController):
|
|||||||
if self.is_subcontracted and self.get("is_old_subcontracting_flow"):
|
if self.is_subcontracted and self.get("is_old_subcontracting_flow"):
|
||||||
if self.doctype in ["Purchase Receipt", "Purchase Invoice"] and not self.supplier_warehouse:
|
if self.doctype in ["Purchase Receipt", "Purchase Invoice"] and not self.supplier_warehouse:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Supplier Warehouse mandatory for sub-contracted {doctype}").format(
|
_("{field_label} is mandatory for sub-contracted {doctype}.").format(
|
||||||
doctype=frappe.bold(self.doctype)
|
field_label=_(self.meta.get_label("supplier_warehouse")), doctype=_(self.doctype)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
for item in self.get("items"):
|
for item in self.get("items"):
|
||||||
if item in self.sub_contracted_items and not item.bom:
|
if item in self.sub_contracted_items and not item.bom:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Please select BOM in BOM field for Item {item_code}").format(
|
_("Please select BOM in BOM field for Item {item_code}.").format(
|
||||||
item_code=frappe.bold(item.item_code)
|
item_code=frappe.bold(item.item_code)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -448,7 +450,7 @@ class BuyingController(SubcontractingController):
|
|||||||
if not row.reserve_warehouse:
|
if not row.reserve_warehouse:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_(
|
_(
|
||||||
"Reserved Warehouse is mandatory for the Item {item_code} in Raw Materials supplied"
|
"Reserved Warehouse is mandatory for the Item {item_code} in Raw Materials supplied."
|
||||||
).format(item_code=frappe.bold(row.rm_item_code))
|
).format(item_code=frappe.bold(row.rm_item_code))
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -466,7 +468,12 @@ class BuyingController(SubcontractingController):
|
|||||||
# Check if item code is present
|
# Check if item code is present
|
||||||
# Conversion factor should not be mandatory for non itemized items
|
# Conversion factor should not be mandatory for non itemized items
|
||||||
if not d.conversion_factor and d.item_code:
|
if not d.conversion_factor and d.item_code:
|
||||||
frappe.throw(_("Row #{idx}: Conversion Factor is mandatory").format(idx=d.idx))
|
frappe.throw(
|
||||||
|
_("Row #{idx}: {field_label} is mandatory.").format(
|
||||||
|
idx=d.idx,
|
||||||
|
field_label=_(d.meta.get_label("conversion_factor")),
|
||||||
|
)
|
||||||
|
)
|
||||||
d.stock_qty = flt(d.qty) * flt(d.conversion_factor)
|
d.stock_qty = flt(d.qty) * flt(d.conversion_factor)
|
||||||
|
|
||||||
if self.doctype == "Purchase Receipt" and d.meta.get_field("received_stock_qty"):
|
if self.doctype == "Purchase Receipt" and d.meta.get_field("received_stock_qty"):
|
||||||
@@ -484,7 +491,10 @@ class BuyingController(SubcontractingController):
|
|||||||
for d in self.get("items"):
|
for d in self.get("items"):
|
||||||
if self.is_return and flt(d.rejected_qty) != 0:
|
if self.is_return and flt(d.rejected_qty) != 0:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Row #{idx}: Rejected Qty can not be entered in Purchase Return").format(idx=d.idx)
|
_("Row #{idx}: {field_label} is not allowed in Purchase Return.").format(
|
||||||
|
idx=d.idx,
|
||||||
|
field_label=_(d.meta.get_label("rejected_qty")),
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
# validate rate with ref PR
|
# validate rate with ref PR
|
||||||
@@ -501,7 +511,7 @@ class BuyingController(SubcontractingController):
|
|||||||
val = flt(d.qty) + flt(d.rejected_qty)
|
val = flt(d.qty) + flt(d.rejected_qty)
|
||||||
if flt(val, d.precision("received_qty")) != flt(d.received_qty, d.precision("received_qty")):
|
if flt(val, d.precision("received_qty")) != flt(d.received_qty, d.precision("received_qty")):
|
||||||
message = _(
|
message = _(
|
||||||
"Row #{idx}: Received Qty must be equal to Accepted + Rejected Qty for Item {item_code}"
|
"Row #{idx}: Received Qty must be equal to Accepted + Rejected Qty for Item {item_code}."
|
||||||
).format(idx=d.idx, item_code=frappe.bold(d.item_code))
|
).format(idx=d.idx, item_code=frappe.bold(d.item_code))
|
||||||
frappe.throw(msg=message, title=_("Mismatch"), exc=QtyMismatchError)
|
frappe.throw(msg=message, title=_("Mismatch"), exc=QtyMismatchError)
|
||||||
|
|
||||||
@@ -513,7 +523,7 @@ class BuyingController(SubcontractingController):
|
|||||||
for fieldname in field_list:
|
for fieldname in field_list:
|
||||||
if flt(item_row[fieldname]) < 0:
|
if flt(item_row[fieldname]) < 0:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Row #{idx}: {field_label} can not be negative for item {item_code}").format(
|
_("Row #{idx}: {field_label} can not be negative for item {item_code}.").format(
|
||||||
idx=item_row["idx"],
|
idx=item_row["idx"],
|
||||||
field_label=frappe.get_meta(item_row.doctype).get_label(fieldname),
|
field_label=frappe.get_meta(item_row.doctype).get_label(fieldname),
|
||||||
item_code=frappe.bold(item_row["item_code"]),
|
item_code=frappe.bold(item_row["item_code"]),
|
||||||
@@ -526,7 +536,7 @@ class BuyingController(SubcontractingController):
|
|||||||
status = frappe.db.get_value(ref_doctype, d.get(ref_fieldname), "status")
|
status = frappe.db.get_value(ref_doctype, d.get(ref_fieldname), "status")
|
||||||
if status in ("Closed", "On Hold"):
|
if status in ("Closed", "On Hold"):
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("{ref_doctype} {ref_name} is {status}").format(
|
_("{ref_doctype} {ref_name} is {status}.").format(
|
||||||
ref_doctype=frappe.bold(_(ref_doctype)),
|
ref_doctype=frappe.bold(_(ref_doctype)),
|
||||||
ref_name=frappe.bold(d.get(ref_fieldname)),
|
ref_name=frappe.bold(d.get(ref_fieldname)),
|
||||||
status=frappe.bold(_(status)),
|
status=frappe.bold(_(status)),
|
||||||
@@ -696,7 +706,10 @@ class BuyingController(SubcontractingController):
|
|||||||
|
|
||||||
if po_obj.status in ["Closed", "Cancelled"]:
|
if po_obj.status in ["Closed", "Cancelled"]:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("{0} {1} is cancelled or closed").format(_("Purchase Order"), po),
|
_("{doctype} {name} is cancelled or closed.").format(
|
||||||
|
doctype=frappe.bold(_("Purchase Order")),
|
||||||
|
name=frappe.bold(po),
|
||||||
|
),
|
||||||
frappe.InvalidStatusError,
|
frappe.InvalidStatusError,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -813,7 +826,7 @@ class BuyingController(SubcontractingController):
|
|||||||
else:
|
else:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_(
|
_(
|
||||||
"Row {idx}: Asset Naming Series is mandatory for the auto creation for item {item_code}"
|
"Row {idx}: Asset Naming Series is mandatory for the auto creation of assets for item {item_code}."
|
||||||
).format(idx=d.idx, item_code=frappe.bold(d.item_code))
|
).format(idx=d.idx, item_code=frappe.bold(d.item_code))
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -830,7 +843,7 @@ class BuyingController(SubcontractingController):
|
|||||||
def make_asset(self, row, accounting_dimensions, is_grouped_asset=False):
|
def make_asset(self, row, accounting_dimensions, is_grouped_asset=False):
|
||||||
if not row.asset_location:
|
if not row.asset_location:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Row #{idx}: Enter location for the asset item {item_code}").format(
|
_("Row #{idx}: Please enter a location for the asset item {item_code}.").format(
|
||||||
idx=row.idx,
|
idx=row.idx,
|
||||||
item_code=frappe.bold(row.item_code),
|
item_code=frappe.bold(row.item_code),
|
||||||
)
|
)
|
||||||
@@ -909,7 +922,7 @@ class BuyingController(SubcontractingController):
|
|||||||
if asset.docstatus == 1 and delete_asset:
|
if asset.docstatus == 1 and delete_asset:
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_(
|
_(
|
||||||
"Cannot cancel this document as it is linked with submitted asset {asset_link}. Please cancel it to continue."
|
"Cannot cancel this document as it is linked with the submitted asset {asset_link}. Please cancel the asset to continue."
|
||||||
).format(asset_link=frappe.utils.get_link_to_form("Asset", asset.name))
|
).format(asset_link=frappe.utils.get_link_to_form("Asset", asset.name))
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -948,7 +961,7 @@ class BuyingController(SubcontractingController):
|
|||||||
and getdate(d.schedule_date) < getdate(self.transaction_date)
|
and getdate(d.schedule_date) < getdate(self.transaction_date)
|
||||||
):
|
):
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("Row #{idx}: {schedule_date} cannot be before {transaction_date}").format(
|
_("Row #{idx}: {schedule_date} cannot be before {transaction_date}.").format(
|
||||||
idx=d.idx,
|
idx=d.idx,
|
||||||
schedule_date=_(self.meta.get_label("schedule_date")),
|
schedule_date=_(self.meta.get_label("schedule_date")),
|
||||||
transaction_date=_(self.meta.get_label("transaction_date")),
|
transaction_date=_(self.meta.get_label("transaction_date")),
|
||||||
@@ -1009,12 +1022,18 @@ def validate_item_type(doc, fieldname, message):
|
|||||||
|
|
||||||
if len(invalid_items) > 1:
|
if len(invalid_items) > 1:
|
||||||
error_message = _(
|
error_message = _(
|
||||||
"Following items {0} are not marked as {1} item. You can enable them as {1} item from its Item master"
|
"The items {items} are not marked as {type_of} item. You can enable them as {type_of} item from their Item masters."
|
||||||
).format(items, message)
|
).format(
|
||||||
|
items=items,
|
||||||
|
type_of=message,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
error_message = _(
|
error_message = _(
|
||||||
"Following item {0} is not marked as {1} item. You can enable them as {1} item from its Item master"
|
"The item {item} is not marked as {type_of} item. You can enable it as {type_of} item from its Item master."
|
||||||
).format(items, message)
|
).format(
|
||||||
|
item=items,
|
||||||
|
type_of=message,
|
||||||
|
)
|
||||||
|
|
||||||
frappe.throw(error_message)
|
frappe.throw(error_message)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user