refactor(treewide): formatting and ruff fixes, + manually enabled F401

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
This commit is contained in:
Akhil Narang
2024-03-27 11:37:26 +05:30
parent 9eeedd8515
commit 960ef14b7a
575 changed files with 4086 additions and 6211 deletions

View File

@@ -169,7 +169,7 @@ class PurchaseOrder(BuyingController):
# end: auto-generated types
def __init__(self, *args, **kwargs):
super(PurchaseOrder, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.status_updater = [
{
"source_dt": "Purchase Order Item",
@@ -190,7 +190,7 @@ class PurchaseOrder(BuyingController):
self.set_onload("can_update_items", self.can_update_items())
def validate(self):
super(PurchaseOrder, self).validate()
super().validate()
self.set_status()
@@ -226,7 +226,7 @@ class PurchaseOrder(BuyingController):
if self.is_subcontracted:
mri_compare_fields = [["project", "="]]
super(PurchaseOrder, self).validate_with_previous_doc(
super().validate_with_previous_doc(
{
"Supplier Quotation": {
"ref_dn_field": "supplier_quotation",
@@ -321,9 +321,7 @@ class PurchaseOrder(BuyingController):
itemwise_min_order_qty = frappe._dict(
frappe.db.sql(
"""select name, min_order_qty
from tabItem where name in ({0})""".format(
", ".join(["%s"] * len(items))
),
from tabItem where name in ({})""".format(", ".join(["%s"] * len(items))),
items,
)
)
@@ -369,7 +367,9 @@ class PurchaseOrder(BuyingController):
)
elif not frappe.get_value("Item", item.fg_item, "default_bom"):
frappe.throw(
_("Row #{0}: Default BOM not found for FG Item {1}").format(item.idx, item.fg_item)
_("Row #{0}: Default BOM not found for FG Item {1}").format(
item.idx, item.fg_item
)
)
if not item.fg_item_qty:
frappe.throw(_("Row #{0}: Finished Good Item Qty can not be zero").format(item.idx))
@@ -403,8 +403,9 @@ class PurchaseOrder(BuyingController):
d.rate = d.base_rate / conversion_rate
d.last_purchase_rate = d.rate
else:
item_last_purchase_rate = frappe.get_cached_value("Item", d.item_code, "last_purchase_rate")
item_last_purchase_rate = frappe.get_cached_value(
"Item", d.item_code, "last_purchase_rate"
)
if item_last_purchase_rate:
d.base_price_list_rate = (
d.base_rate
@@ -439,7 +440,7 @@ class PurchaseOrder(BuyingController):
def check_modified_date(self):
mod_db = frappe.db.sql("select modified from `tabPurchase Order` where name = %s", self.name)
date_diff = frappe.db.sql("select '%s' - '%s' " % (mod_db[0][0], cstr(self.modified)))
date_diff = frappe.db.sql(f"select '{mod_db[0][0]}' - '{cstr(self.modified)}' ")
if date_diff and date_diff[0][0]:
msgprint(
@@ -459,7 +460,7 @@ class PurchaseOrder(BuyingController):
clear_doctype_notifications(self)
def on_submit(self):
super(PurchaseOrder, self).on_submit()
super().on_submit()
if self.is_against_so():
self.update_status_updater()
@@ -484,7 +485,7 @@ class PurchaseOrder(BuyingController):
def on_cancel(self):
self.ignore_linked_doctypes = ("GL Entry", "Payment Ledger Entry")
super(PurchaseOrder, self).on_cancel()
super().on_cancel()
if self.is_against_so():
self.update_status_updater()
@@ -656,7 +657,9 @@ def close_or_unclose_purchase_orders(names, status):
po = frappe.get_doc("Purchase Order", name)
if po.docstatus == 1:
if status == "Closed":
if po.status not in ("Cancelled", "Closed") and (po.per_received < 100 or po.per_billed < 100):
if po.status not in ("Cancelled", "Closed") and (
po.per_received < 100 or po.per_billed < 100
):
po.update_status(status)
else:
if po.status == "Closed":
@@ -827,9 +830,7 @@ def make_inter_company_sales_order(source_name, target_doc=None):
@frappe.whitelist()
def make_subcontracting_order(
source_name, target_doc=None, save=False, submit=False, notify=False
):
def make_subcontracting_order(source_name, target_doc=None, save=False, submit=False, notify=False):
target_doc = get_mapped_subcontracting_order(source_name, target_doc)
if (save or submit) and frappe.has_permission(target_doc.doctype, "create"):
@@ -854,7 +855,6 @@ def make_subcontracting_order(
def get_mapped_subcontracting_order(source_name, target_doc=None):
if target_doc and isinstance(target_doc, str):
target_doc = json.loads(target_doc)
for key in ["service_items", "items", "supplied_items"]:

View File

@@ -11,11 +11,13 @@ from frappe.utils.data import today
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
from erpnext.accounts.party import get_due_date_from_template
from erpnext.buying.doctype.purchase_order.purchase_order import make_inter_company_sales_order
from erpnext.buying.doctype.purchase_order.purchase_order import (
make_inter_company_sales_order,
make_purchase_receipt,
)
from erpnext.buying.doctype.purchase_order.purchase_order import (
make_purchase_invoice as make_pi_from_po,
)
from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
from erpnext.controllers.accounts_controller import InvalidQtyError, update_child_qty_rate
from erpnext.manufacturing.doctype.blanket_order.test_blanket_order import make_blanket_order
from erpnext.stock.doctype.item.test_item import make_item
@@ -190,7 +192,7 @@ class TestPurchaseOrder(FrappeTestCase):
po.items[0].qty = 4
po.save()
po.submit()
pr = make_pr_against_po(po.name, 2)
make_pr_against_po(po.name, 2)
po.load_from_db()
existing_ordered_qty = get_ordered_qty()
@@ -220,7 +222,7 @@ class TestPurchaseOrder(FrappeTestCase):
po.items[0].qty = 4
po.save()
po.submit()
pr = make_pr_against_po(po.name, 2)
make_pr_against_po(po.name, 2)
po.reload()
first_item_of_po = po.get("items")[0]
@@ -461,9 +463,7 @@ class TestPurchaseOrder(FrappeTestCase):
make_purchase_receipt as make_purchase_receipt_return,
)
pr1 = make_purchase_receipt_return(
is_return=1, return_against=pr.name, qty=-3, do_not_submit=True
)
pr1 = make_purchase_receipt_return(is_return=1, return_against=pr.name, qty=-3, do_not_submit=True)
pr1.items[0].purchase_order = po.name
pr1.items[0].purchase_order_item = po.items[0].name
pr1.submit()
@@ -544,9 +544,7 @@ class TestPurchaseOrder(FrappeTestCase):
self.assertEqual(po.payment_schedule[0].payment_amount, 2500.0)
self.assertEqual(getdate(po.payment_schedule[0].due_date), getdate(po.transaction_date))
self.assertEqual(po.payment_schedule[1].payment_amount, 2500.0)
self.assertEqual(
getdate(po.payment_schedule[1].due_date), add_days(getdate(po.transaction_date), 30)
)
self.assertEqual(getdate(po.payment_schedule[1].due_date), add_days(getdate(po.transaction_date), 30))
pi = make_pi_from_po(po.name)
pi.save()
@@ -556,9 +554,7 @@ class TestPurchaseOrder(FrappeTestCase):
self.assertEqual(pi.payment_schedule[0].payment_amount, 2500.0)
self.assertEqual(getdate(pi.payment_schedule[0].due_date), getdate(po.transaction_date))
self.assertEqual(pi.payment_schedule[1].payment_amount, 2500.0)
self.assertEqual(
getdate(pi.payment_schedule[1].due_date), add_days(getdate(po.transaction_date), 30)
)
self.assertEqual(getdate(pi.payment_schedule[1].due_date), add_days(getdate(po.transaction_date), 30))
automatically_fetch_payment_terms(enable=0)
def test_warehouse_company_validation(self):
@@ -702,9 +698,9 @@ class TestPurchaseOrder(FrappeTestCase):
raise Exception
def test_default_payment_terms(self):
due_date = get_due_date_from_template(
"_Test Payment Term Template 1", "2023-02-03", None
).strftime("%Y-%m-%d")
due_date = get_due_date_from_template("_Test Payment Term Template 1", "2023-02-03", None).strftime(
"%Y-%m-%d"
)
self.assertEqual(due_date, "2023-03-31")
def test_terms_are_not_copied_if_automatically_fetch_payment_terms_is_unchecked(self):
@@ -755,9 +751,7 @@ class TestPurchaseOrder(FrappeTestCase):
pe_doc.cancel()
def create_account(self, account_name, company, currency, parent):
if not frappe.db.get_value(
"Account", filters={"account_name": account_name, "company": company}
):
if not frappe.db.get_value("Account", filters={"account_name": account_name, "company": company}):
account = frappe.get_doc(
{
"doctype": "Account",
@@ -788,9 +782,7 @@ class TestPurchaseOrder(FrappeTestCase):
company = "_Test Company"
# Setup default 'Advance Paid' account
account = self.create_account(
"Advance Paid", company, "INR", "Application of Funds (Assets) - _TC"
)
account = self.create_account("Advance Paid", company, "INR", "Application of Funds (Assets) - _TC")
company_doc = frappe.get_doc("Company", company)
company_doc.book_advance_payments_in_separate_party_account = True
company_doc.default_advance_paid_account = account.name
@@ -885,7 +877,7 @@ class TestPurchaseOrder(FrappeTestCase):
Second Purchase Order should not add on to Blanket Orders Ordered Quantity.
"""
bo = make_blanket_order(blanket_order_type="Purchasing", quantity=10, rate=10)
make_blanket_order(blanket_order_type="Purchasing", quantity=10, rate=10)
po = create_purchase_order(item_code="_Test Item", qty=5, against_blanket_order=1)
po_doc = frappe.get_doc("Purchase Order", po.get("name"))
@@ -1281,15 +1273,11 @@ def create_pr_against_po(po, received_qty=4):
def get_ordered_qty(item_code="_Test Item", warehouse="_Test Warehouse - _TC"):
return flt(
frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "ordered_qty")
)
return flt(frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "ordered_qty"))
def get_requested_qty(item_code="_Test Item", warehouse="_Test Warehouse - _TC"):
return flt(
frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "indented_qty")
)
return flt(frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "indented_qty"))
test_dependencies = ["BOM", "Item Price"]

View File

@@ -3,7 +3,6 @@
import json
from typing import Optional
import frappe
from frappe import _
@@ -66,7 +65,7 @@ class RequestforQuotation(BuyingController):
self.validate_duplicate_supplier()
self.validate_supplier_list()
validate_for_items(self)
super(RequestforQuotation, self).set_qty_as_per_stock_uom()
super().set_qty_as_per_stock_uom()
self.update_email_id()
if self.docstatus < 1:
@@ -316,7 +315,7 @@ class RequestforQuotation(BuyingController):
def update_rfq_supplier_status(self, sup_name=None):
for supplier in self.suppliers:
if sup_name == None or supplier.supplier == sup_name:
if sup_name is None or supplier.supplier == sup_name:
quote_status = _("Received")
for item in self.items:
sqi_count = frappe.db.sql(
@@ -347,9 +346,7 @@ def send_supplier_emails(rfq_name):
def check_portal_enabled(reference_doctype):
if not frappe.db.get_value(
"Portal Menu Item", {"reference_doctype": reference_doctype}, "enabled"
):
if not frappe.db.get_value("Portal Menu Item", {"reference_doctype": reference_doctype}, "enabled"):
frappe.throw(
_(
"The Access to Request for Quotation From Portal is Disabled. To Allow Access, Enable it in Portal Settings."
@@ -478,9 +475,9 @@ def create_rfq_items(sq_doc, supplier, data):
def get_pdf(
name: str,
supplier: str,
print_format: Optional[str] = None,
language: Optional[str] = None,
letterhead: Optional[str] = None,
print_format: str | None = None,
language: str | None = None,
letterhead: str | None = None,
):
doc = frappe.get_doc("Request for Quotation", name)
if supplier:
@@ -555,9 +552,7 @@ def get_item_from_material_requests_based_on_supplier(source_name, target_doc=No
@frappe.whitelist()
def get_supplier_tag():
filters = {"document_type": "Supplier"}
tags = list(
set(tag.tag for tag in frappe.get_all("Tag Link", filters=filters, fields=["tag"]) if tag)
)
tags = list(set(tag.tag for tag in frappe.get_all("Tag Link", filters=filters, fields=["tag"]) if tag))
return tags
@@ -570,7 +565,7 @@ def get_rfq_containing_supplier(doctype, txt, searchfield, start, page_len, filt
conditions += "and rfq.name like '%%" + txt + "%%' "
if filters.get("transaction_date"):
conditions += "and rfq.transaction_date = '{0}'".format(filters.get("transaction_date"))
conditions += "and rfq.transaction_date = '{}'".format(filters.get("transaction_date"))
rfq_data = frappe.db.sql(
f"""

View File

@@ -64,9 +64,7 @@ class TestRequestforQuotation(FrappeTestCase):
rfq = make_request_for_quotation(supplier_data=supplier_wt_appos)
sq = make_supplier_quotation_from_rfq(
rfq.name, for_supplier=supplier_wt_appos[0].get("supplier")
)
sq = make_supplier_quotation_from_rfq(rfq.name, for_supplier=supplier_wt_appos[0].get("supplier"))
sq.submit()
frappe.form_dict.name = rfq.name
@@ -97,9 +95,7 @@ class TestRequestforQuotation(FrappeTestCase):
row = item.append("uoms", {"uom": "Kg", "conversion_factor": 2})
row.db_update()
rfq = make_request_for_quotation(
item_code="_Test Multi UOM RFQ Item", uom="Kg", conversion_factor=2
)
rfq = make_request_for_quotation(item_code="_Test Multi UOM RFQ Item", uom="Kg", conversion_factor=2)
rfq.get("items")[0].rate = 100
rfq.supplier = rfq.suppliers[0].supplier

View File

@@ -11,9 +11,8 @@ from frappe.contacts.address_and_contact import (
)
from frappe.model.naming import set_name_by_naming_series, set_name_from_naming_options
from erpnext.accounts.party import ( # noqa
from erpnext.accounts.party import (
get_dashboard_info,
get_timeline_data,
validate_party_accounts,
)
from erpnext.controllers.website_list_for_contact import add_role_for_portal_user
@@ -126,9 +125,7 @@ class Supplier(TransactionBase):
return
user_doc.add_roles("Supplier")
frappe.msgprint(
_("Added Supplier Role to User {0}.").format(frappe.bold(user_doc.name)), alert=True
)
frappe.msgprint(_("Added Supplier Role to User {0}.").format(frappe.bold(user_doc.name)), alert=True)
def validate(self):
self.flags.is_new_doc = self.is_new()
@@ -230,6 +227,6 @@ def get_supplier_primary_contact(doctype, txt, searchfield, start, page_len, fil
.where(
(dynamic_link.link_name == supplier)
& (dynamic_link.link_doctype == "Supplier")
& (contact.name.like("%{0}%".format(txt)))
& (contact.name.like(f"%{txt}%"))
)
).run(as_dict=False)

View File

@@ -3,7 +3,6 @@
import frappe
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
from frappe.test_runner import make_test_records
from erpnext.accounts.party import get_due_date
@@ -183,7 +182,6 @@ def create_supplier(**args):
class TestSupplierPortal(FrappeTestCase):
def test_portal_user_can_access_supplier_data(self):
supplier = create_supplier()
user = frappe.generate_hash() + "@example.com"

View File

@@ -104,7 +104,7 @@ class SupplierQuotation(BuyingController):
# end: auto-generated types
def validate(self):
super(SupplierQuotation, self).validate()
super().validate()
if not self.status:
self.status = "Draft"
@@ -130,7 +130,7 @@ class SupplierQuotation(BuyingController):
pass
def validate_with_previous_doc(self):
super(SupplierQuotation, self).validate_with_previous_doc(
super().validate_with_previous_doc(
{
"Material Request": {
"ref_dn_field": "prevdoc_docname",

View File

@@ -66,7 +66,11 @@ class SupplierScorecard(Document):
for c2 in self.standings:
if c1 != c2:
if c1.max_grade > c2.min_grade and c1.min_grade < c2.max_grade:
throw(_("Overlap in scoring between {0} and {1}").format(c1.standing_name, c2.standing_name))
throw(
_("Overlap in scoring between {0} and {1}").format(
c1.standing_name, c2.standing_name
)
)
if c2.min_grade == score:
score = c2.max_grade
if score < 100:
@@ -77,7 +81,6 @@ class SupplierScorecard(Document):
)
def validate_criteria_weights(self):
weight = 0
for c in self.criteria:
weight += c.weight
@@ -196,7 +199,6 @@ def refresh_scorecards():
@frappe.whitelist()
def make_all_scorecards(docname):
sc = frappe.get_doc("Supplier Scorecard", docname)
supplier = frappe.get_doc("Supplier", sc.supplier)

View File

@@ -43,8 +43,8 @@ class SupplierScorecardCriteria(Document):
regex = r"\{(.*?)\}"
mylist = re.finditer(regex, test_formula, re.MULTILINE | re.DOTALL)
for dummy1, match in enumerate(mylist):
for dummy2 in range(0, len(match.groups())):
for _dummy1, match in enumerate(mylist):
for _dummy2 in range(0, len(match.groups())):
test_formula = test_formula.replace("{" + match.group(1) + "}", "0")
try:
@@ -78,8 +78,8 @@ def _get_variables(criteria):
regex = r"\{(.*?)\}"
mylist = re.finditer(regex, criteria.formula, re.MULTILINE | re.DOTALL)
for dummy1, match in enumerate(mylist):
for dummy2 in range(0, len(match.groups())):
for _dummy1, match in enumerate(mylist):
for _dummy2 in range(0, len(match.groups())):
try:
var = frappe.db.sql(
"""
@@ -94,6 +94,8 @@ def _get_variables(criteria):
)[0]
my_variables.append(var)
except Exception:
frappe.throw(_("Unable to find variable:") + " " + str(match.group(1)), InvalidFormulaVariable)
frappe.throw(
_("Unable to find variable:") + " " + str(match.group(1)), InvalidFormulaVariable
)
return my_variables

View File

@@ -47,7 +47,6 @@ class SupplierScorecardPeriod(Document):
self.calculate_score()
def validate_criteria_weights(self):
weight = 0
for c in self.criteria:
weight += c.weight
@@ -70,14 +69,17 @@ class SupplierScorecardPeriod(Document):
crit.score = min(
crit.max_score,
max(
0, frappe.safe_eval(self.get_eval_statement(crit.formula), None, {"max": max, "min": min})
0,
frappe.safe_eval(
self.get_eval_statement(crit.formula), None, {"max": max, "min": min}
),
),
)
except Exception:
frappe.throw(
_("Could not solve criteria score function for {0}. Make sure the formula is valid.").format(
crit.criteria_name
),
_(
"Could not solve criteria score function for {0}. Make sure the formula is valid."
).format(crit.criteria_name),
frappe.ValidationError,
)
crit.score = 0
@@ -108,7 +110,7 @@ class SupplierScorecardPeriod(Document):
if var.value:
if var.param_name in my_eval_statement:
my_eval_statement = my_eval_statement.replace(
"{" + var.param_name + "}", "{:.2f}".format(var.value)
"{" + var.param_name + "}", f"{var.value:.2f}"
)
else:
if var.param_name in my_eval_statement:

View File

@@ -2,17 +2,8 @@
# For license information, please see license.txt
from datetime import datetime
import frappe
from frappe.tests.utils import FrappeTestCase
from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
from erpnext.buying.report.procurement_tracker.procurement_tracker import execute
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
from erpnext.stock.doctype.material_request.test_material_request import make_material_request
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
class TestProcurementTracker(FrappeTestCase):
pass

View File

@@ -68,9 +68,7 @@ def get_data(filters):
po.company,
po_item.name,
)
.where(
(po_item.parent == po.name) & (po.status.notin(("Stopped", "Closed"))) & (po.docstatus == 1)
)
.where((po_item.parent == po.name) & (po.status.notin(("Stopped", "Closed"))) & (po.docstatus == 1))
.groupby(po_item.name)
.orderby(po.transaction_date)
)
@@ -80,9 +78,7 @@ def get_data(filters):
query = query.where(po[field] == filters.get(field))
if filters.get("from_date") and filters.get("to_date"):
query = query.where(
po.transaction_date.between(filters.get("from_date"), filters.get("to_date"))
)
query = query.where(po.transaction_date.between(filters.get("from_date"), filters.get("to_date")))
if filters.get("status"):
query = query.where(po.status.isin(filters.get("status")))
@@ -114,7 +110,7 @@ def prepare_data(data, filters):
if filters.get("group_by_po"):
po_name = row["purchase_order"]
if not po_name in purchase_order_map:
if po_name not in purchase_order_map:
# create an entry
row_copy = copy.deepcopy(row)
purchase_order_map[po_name] = row_copy

View File

@@ -57,9 +57,7 @@ def get_data(filters):
"qty_to_receive"
),
Sum(Coalesce(mr_item.received_qty, 0)).as_("received_qty"),
(Sum(Coalesce(mr_item.stock_qty, 0)) - Sum(Coalesce(mr_item.ordered_qty, 0))).as_(
"qty_to_order"
),
(Sum(Coalesce(mr_item.stock_qty, 0)) - Sum(Coalesce(mr_item.ordered_qty, 0))).as_("qty_to_order"),
mr_item.item_name,
mr_item.description,
mr.company,
@@ -110,7 +108,7 @@ def prepare_data(data, filters):
for row in data:
# item wise map for charts
if not row["item_code"] in item_qty_map:
if row["item_code"] not in item_qty_map:
item_qty_map[row["item_code"]] = {
"qty": flt(row["stock_qty"], precision),
"stock_qty": flt(row["stock_qty"], precision),
@@ -127,7 +125,7 @@ def prepare_data(data, filters):
if filters.get("group_by_mr"):
# consolidated material request map for group by filter
if not row["material_request"] in material_request_map:
if row["material_request"] not in material_request_map:
# create an entry with mr as key
row_copy = copy.deepcopy(row)
material_request_map[row["material_request"]] = row_copy

View File

@@ -112,7 +112,7 @@ def prepare_subcontracted_data(orders, supplied_items):
def get_subcontracted_data(order_details, data):
for key, details in order_details.items():
for _key, details in order_details.items():
res = details.order_item
for index, row in enumerate(details.supplied_items):
if index != 0:

View File

@@ -62,7 +62,9 @@ class TestSubcontractedItemToBeReceived(FrappeTestCase):
"from_date": frappe.utils.get_datetime(
frappe.utils.add_to_date(sco.transaction_date, days=-10)
),
"to_date": frappe.utils.get_datetime(frappe.utils.add_to_date(sco.transaction_date, days=10)),
"to_date": frappe.utils.get_datetime(
frappe.utils.add_to_date(sco.transaction_date, days=10)
),
}
)
)

View File

@@ -48,7 +48,9 @@ class TestSubcontractedItemToBeTransferred(FrappeTestCase):
"from_date": frappe.utils.get_datetime(
frappe.utils.add_to_date(sco.transaction_date, days=-10)
),
"to_date": frappe.utils.get_datetime(frappe.utils.add_to_date(sco.transaction_date, days=10)),
"to_date": frappe.utils.get_datetime(
frappe.utils.add_to_date(sco.transaction_date, days=10)
),
}
)
)

View File

@@ -82,18 +82,14 @@ def prepare_data(supplier_quotation_data, filters):
group_wise_map = defaultdict(list)
supplier_qty_price_map = {}
group_by_field = (
"supplier_name" if filters.get("group_by") == "Group by Supplier" else "item_code"
)
group_by_field = "supplier_name" if filters.get("group_by") == "Group by Supplier" else "item_code"
company_currency = frappe.db.get_default("currency")
float_precision = cint(frappe.db.get_default("float_precision")) or 2
for data in supplier_quotation_data:
group = data.get(group_by_field) # get item or supplier value for this row
supplier_currency = frappe.db.get_value(
"Supplier", data.get("supplier_name"), "default_currency"
)
supplier_currency = frappe.db.get_value("Supplier", data.get("supplier_name"), "default_currency")
if supplier_currency:
exchange_rate = get_exchange_rate(supplier_currency, company_currency)
@@ -126,7 +122,7 @@ def prepare_data(supplier_quotation_data, filters):
# map for chart preparation of the form {'supplier1': {'qty': 'price'}}
supplier = data.get("supplier_name")
if filters.get("item_code"):
if not supplier in supplier_qty_price_map:
if supplier not in supplier_qty_price_map:
supplier_qty_price_map[supplier] = {}
supplier_qty_price_map[supplier][row["qty"]] = row["price"]
@@ -169,7 +165,7 @@ def prepare_chart_data(suppliers, qty_list, supplier_qty_price_map):
for supplier in suppliers:
entry = supplier_qty_price_map[supplier]
for qty in qty_list:
if not qty in data_points_map:
if qty not in data_points_map:
data_points_map[qty] = []
if qty in entry:
data_points_map[qty].append(entry[qty])

View File

@@ -3,7 +3,6 @@
import json
from typing import Dict
import frappe
from frappe import _
@@ -87,7 +86,7 @@ def set_stock_levels(row) -> None:
row.set(field, qty_data[field])
def validate_item_and_get_basic_data(row) -> Dict:
def validate_item_and_get_basic_data(row) -> dict:
item = frappe.db.get_values(
"Item",
filters={"name": row.item_code},
@@ -101,12 +100,7 @@ def validate_item_and_get_basic_data(row) -> Dict:
def validate_stock_item_warehouse(row, item) -> None:
if (
item.is_stock_item == 1
and row.qty
and not row.warehouse
and not row.get("delivered_by_supplier")
):
if item.is_stock_item == 1 and row.qty and not row.warehouse and not row.get("delivered_by_supplier"):
frappe.throw(
_("Row #{1}: Warehouse is mandatory for stock Item {0}").format(
frappe.bold(row.item_code), row.idx
@@ -118,9 +112,7 @@ def check_on_hold_or_closed_status(doctype, docname) -> None:
status = frappe.db.get_value(doctype, docname, "status")
if status in ("Closed", "On Hold"):
frappe.throw(
_("{0} {1} status is {2}").format(doctype, docname, status), frappe.InvalidStatusError
)
frappe.throw(_("{0} {1} status is {2}").format(doctype, docname, status), frappe.InvalidStatusError)
@frappe.whitelist()