Merge pull request #38588 from frappe/version-13-hotfix

chore: release v13
This commit is contained in:
Deepesh Garg
2023-12-05 19:19:16 +05:30
committed by GitHub
6 changed files with 75 additions and 49 deletions

View File

@@ -11,10 +11,10 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Set up Python 3.8 - name: Set up Python 3.10
uses: actions/setup-python@v2 uses: actions/setup-python@v2
with: with:
python-version: 3.8 python-version: '3.10'
- name: Install and Run Pre-commit - name: Install and Run Pre-commit
uses: pre-commit/action@v2.0.3 uses: pre-commit/action@v2.0.3
@@ -22,10 +22,8 @@ jobs:
- name: Download Semgrep rules - name: Download Semgrep rules
run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules
- uses: returntocorp/semgrep-action@v1 - name: Download semgrep
env: run: pip install semgrep
SEMGREP_TIMEOUT: 120
with: - name: Run Semgrep rules
config: >- run: semgrep ci --config ./frappe-semgrep-rules/rules --config r/python.lang.correctness
r/python.lang.correctness
./frappe-semgrep-rules/rules

View File

@@ -295,6 +295,7 @@ class PaymentReconciliation(Document):
"amount": pay.get("amount"), "amount": pay.get("amount"),
"allocated_amount": allocated_amount, "allocated_amount": allocated_amount,
"difference_amount": pay.get("difference_amount"), "difference_amount": pay.get("difference_amount"),
"currency": inv.get("currency"),
} }
) )

View File

@@ -20,7 +20,8 @@
"section_break_5", "section_break_5",
"difference_amount", "difference_amount",
"column_break_7", "column_break_7",
"difference_account" "difference_account",
"currency"
], ],
"fields": [ "fields": [
{ {
@@ -37,7 +38,7 @@
"fieldtype": "Currency", "fieldtype": "Currency",
"in_list_view": 1, "in_list_view": 1,
"label": "Allocated Amount", "label": "Allocated Amount",
"options": "Currency", "options": "currency",
"reqd": 1 "reqd": 1
}, },
{ {
@@ -112,7 +113,7 @@
"fieldtype": "Currency", "fieldtype": "Currency",
"hidden": 1, "hidden": 1,
"label": "Unreconciled Amount", "label": "Unreconciled Amount",
"options": "Currency", "options": "currency",
"read_only": 1 "read_only": 1
}, },
{ {
@@ -120,7 +121,7 @@
"fieldtype": "Currency", "fieldtype": "Currency",
"hidden": 1, "hidden": 1,
"label": "Amount", "label": "Amount",
"options": "Currency", "options": "currency",
"read_only": 1 "read_only": 1
}, },
{ {
@@ -129,11 +130,18 @@
"hidden": 1, "hidden": 1,
"label": "Reference Row", "label": "Reference Row",
"read_only": 1 "read_only": 1
},
{
"fieldname": "currency",
"fieldtype": "Link",
"hidden": 1,
"label": "Currency",
"options": "Currency"
} }
], ],
"istable": 1, "istable": 1,
"links": [], "links": [],
"modified": "2021-10-06 11:48:59.616562", "modified": "2023-11-28 16:30:43.344612",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Payment Reconciliation Allocation", "name": "Payment Reconciliation Allocation",

View File

@@ -13,7 +13,7 @@ frappe.ui.form.on("Communication", {
frappe.confirm(__(confirm_msg, [__("Issue")]), () => { frappe.confirm(__(confirm_msg, [__("Issue")]), () => {
frm.trigger('make_issue_from_communication'); frm.trigger('make_issue_from_communication');
}) })
}, "Create"); }, __("Create"));
} }
if(!in_list(["Lead", "Opportunity"], frm.doc.reference_doctype)) { if(!in_list(["Lead", "Opportunity"], frm.doc.reference_doctype)) {

View File

@@ -13,10 +13,18 @@ const DIFFERENCE_FIELD_NAMES = [
frappe.query_reports["Stock Ledger Variance"] = { frappe.query_reports["Stock Ledger Variance"] = {
"filters": [ "filters": [
{
"fieldname": "company",
"label": __("Company"),
"fieldtype": "Link",
"options": "Company",
"reqd": 1,
"default": frappe.defaults.get_user_default("Company")
},
{ {
"fieldname": "item_code", "fieldname": "item_code",
"fieldtype": "Link", "fieldtype": "Link",
"label": "Item", "label": __("Item"),
"options": "Item", "options": "Item",
get_query: function() { get_query: function() {
return { return {
@@ -27,7 +35,7 @@ frappe.query_reports["Stock Ledger Variance"] = {
{ {
"fieldname": "warehouse", "fieldname": "warehouse",
"fieldtype": "Link", "fieldtype": "Link",
"label": "Warehouse", "label": __("Warehouse"),
"options": "Warehouse", "options": "Warehouse",
get_query: function() { get_query: function() {
return { return {
@@ -38,7 +46,7 @@ frappe.query_reports["Stock Ledger Variance"] = {
{ {
"fieldname": "difference_in", "fieldname": "difference_in",
"fieldtype": "Select", "fieldtype": "Select",
"label": "Difference In", "label": __("Difference In"),
"options": [ "options": [
"", "",
"Qty", "Qty",
@@ -49,7 +57,7 @@ frappe.query_reports["Stock Ledger Variance"] = {
{ {
"fieldname": "include_disabled", "fieldname": "include_disabled",
"fieldtype": "Check", "fieldtype": "Check",
"label": "Include Disabled", "label": __("Include Disabled"),
} }
], ],

View File

@@ -55,6 +55,11 @@ def get_columns():
"label": _("Warehouse"), "label": _("Warehouse"),
"options": "Warehouse", "options": "Warehouse",
}, },
{
"fieldname": "valuation_method",
"fieldtype": "Data",
"label": _("Valuation Method"),
},
{ {
"fieldname": "voucher_type", "fieldname": "voucher_type",
"fieldtype": "Link", "fieldtype": "Link",
@@ -194,6 +199,7 @@ def get_columns():
def get_data(filters=None): def get_data(filters=None):
filters = frappe._dict(filters or {}) filters = frappe._dict(filters or {})
item_warehouse_map = get_item_warehouse_combinations(filters) item_warehouse_map = get_item_warehouse_combinations(filters)
valuation_method = frappe.db.get_single_value("Stock Settings", "valuation_method")
data = [] data = []
if item_warehouse_map: if item_warehouse_map:
@@ -206,8 +212,17 @@ def get_data(filters=None):
continue continue
for row in report_data: for row in report_data:
if has_difference(row, precision, filters.difference_in): if has_difference(
data.append(add_item_warehouse_details(row, item_warehouse)) row, precision, filters.difference_in, item_warehouse.valuation_method or valuation_method
):
row.update(
{
"item_code": item_warehouse.item_code,
"warehouse": item_warehouse.warehouse,
"valuation_method": item_warehouse.valuation_method or valuation_method,
}
)
data.append(row)
break break
return data return data
@@ -229,8 +244,14 @@ def get_item_warehouse_combinations(filters: dict = None) -> dict:
.select( .select(
bin.item_code, bin.item_code,
bin.warehouse, bin.warehouse,
item.valuation_method,
)
.where(
(item.is_stock_item == 1)
& (item.has_serial_no == 0)
& (warehouse.is_group == 0)
& (warehouse.company == filters.company)
) )
.where((item.is_stock_item == 1) & (item.has_serial_no == 0) & (warehouse.is_group == 0))
) )
if filters.item_code: if filters.item_code:
@@ -243,37 +264,27 @@ def get_item_warehouse_combinations(filters: dict = None) -> dict:
return query.run(as_dict=1) return query.run(as_dict=1)
def has_difference(row, precision, difference_in): def has_difference(row, precision, difference_in, valuation_method):
has_qty_difference = flt(row.difference_in_qty, precision) or flt(row.fifo_qty_diff, precision) if valuation_method == "Moving Average":
has_value_difference = ( qty_diff = flt(row.difference_in_qty, precision)
flt(row.diff_value_diff, precision) value_diff = flt(row.diff_value_diff, precision)
or flt(row.fifo_value_diff, precision) valuation_diff = flt(row.valuation_diff, precision)
or flt(row.fifo_difference_diff, precision) else:
) qty_diff = flt(row.difference_in_qty, precision) or flt(row.fifo_qty_diff, precision)
has_valuation_difference = flt(row.valuation_diff, precision) or flt( value_diff = (
row.fifo_valuation_diff, precision flt(row.diff_value_diff, precision)
) or flt(row.fifo_value_diff, precision)
or flt(row.fifo_difference_diff, precision)
)
valuation_diff = flt(row.valuation_diff, precision) or flt(row.fifo_valuation_diff, precision)
if difference_in == "Qty" and has_qty_difference: if difference_in == "Qty" and qty_diff:
return True return True
elif difference_in == "Value" and has_value_difference: elif difference_in == "Value" and value_diff:
return True return True
elif difference_in == "Valuation" and has_valuation_difference: elif difference_in == "Valuation" and valuation_diff:
return True return True
elif difference_in not in ["Qty", "Value", "Valuation"] and ( elif difference_in not in ["Qty", "Value", "Valuation"] and (
has_qty_difference or has_value_difference or has_valuation_difference qty_diff or value_diff or valuation_diff
): ):
return True return True
return False
def add_item_warehouse_details(row, item_warehouse):
row.update(
{
"item_code": item_warehouse.item_code,
"warehouse": item_warehouse.warehouse,
}
)
return row