Merge branch 'develop' into hr-separation
diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml
index ebb88c9..af6d8f2 100644
--- a/.github/workflows/linters.yml
+++ b/.github/workflows/linters.yml
@@ -11,10 +11,10 @@
steps:
- uses: actions/checkout@v2
- - name: Set up Python 3.8
+ - name: Set up Python 3.10
uses: actions/setup-python@v2
with:
- python-version: 3.8
+ python-version: '3.10'
- name: Install and Run Pre-commit
uses: pre-commit/action@v2.0.3
@@ -22,10 +22,8 @@
- name: Download Semgrep rules
run: git clone --depth 1 https://github.com/frappe/semgrep-rules.git frappe-semgrep-rules
- - uses: returntocorp/semgrep-action@v1
- env:
- SEMGREP_TIMEOUT: 120
- with:
- config: >-
- r/python.lang.correctness
- ./frappe-semgrep-rules/rules
+ - name: Download semgrep
+ run: pip install semgrep==0.97.0
+
+ - name: Run Semgrep rules
+ run: semgrep ci --config ./frappe-semgrep-rules/rules --config r/python.lang.correctness
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index 1911152..411b313 100755
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -128,6 +128,7 @@
credit_note_in_account_currency=0.0,
outstanding_in_account_currency=0.0,
)
+ self.get_invoices(ple)
if self.filters.get("group_by_party"):
self.init_subtotal_row(ple.party)
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index bc5a59a..ea01502 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -401,6 +401,14 @@
"0/30 * * * *": [
"erpnext.utilities.doctype.video.video.update_youtube_data",
],
+ # Hourly but offset by 30 minutes
+ "30 * * * *": [
+ "erpnext.accounts.doctype.gl_entry.gl_entry.rename_gle_sle_docs",
+ ],
+ # Daily but offset by 45 minutes
+ "45 0 * * *": [
+ "erpnext.stock.reorder_item.reorder_item",
+ ],
},
"all": [
"erpnext.projects.doctype.project.project.project_status_update_reminder",
@@ -408,7 +416,6 @@
],
"hourly": [
"erpnext.accounts.doctype.subscription.subscription.process_all",
- "erpnext.accounts.doctype.gl_entry.gl_entry.rename_gle_sle_docs",
"erpnext.erpnext_integrations.doctype.plaid_settings.plaid_settings.automatic_synchronization",
"erpnext.projects.doctype.project.project.hourly_reminder",
"erpnext.projects.doctype.project.project.collect_project_status",
@@ -418,7 +425,6 @@
"erpnext.bulk_transaction.doctype.bulk_transaction_log.bulk_transaction_log.retry_failing_transaction",
],
"daily": [
- "erpnext.stock.reorder_item.reorder_item",
"erpnext.support.doctype.issue.issue.auto_close_tickets",
"erpnext.crm.doctype.opportunity.opportunity.auto_close_opportunity",
"erpnext.controllers.accounts_controller.update_invoice_status",
diff --git a/erpnext/stock/dashboard/item_dashboard.js b/erpnext/stock/dashboard/item_dashboard.js
index c9d5f61..6e7622c 100644
--- a/erpnext/stock/dashboard/item_dashboard.js
+++ b/erpnext/stock/dashboard/item_dashboard.js
@@ -260,6 +260,16 @@
}
dialog.set_primary_action(__('Create Stock Entry'), function () {
+ if (source && (dialog.get_value("qty") == 0 || dialog.get_value("qty") > actual_qty)) {
+ frappe.msgprint(__("Quantity must be greater than zero, and less or equal to {0}", [actual_qty]));
+ return;
+ }
+
+ if (dialog.get_value("source") === dialog.get_value("target")) {
+ frappe.msgprint(__("Source and target warehouse must be different"));
+ return;
+ }
+
frappe.model.with_doctype('Stock Entry', function () {
let doc = frappe.model.get_new_doc('Stock Entry');
doc.from_warehouse = dialog.get_value('source');