Merge branch 'develop' into se-required-items-from-jc
This commit is contained in:
commit
18f9e3558e
2
.github/workflows/patch.yml
vendored
2
.github/workflows/patch.yml
vendored
@ -93,7 +93,7 @@ jobs:
|
|||||||
for version in $(seq 12 13)
|
for version in $(seq 12 13)
|
||||||
do
|
do
|
||||||
echo "Updating to v$version"
|
echo "Updating to v$version"
|
||||||
branch_name="version-$version"
|
branch_name="version-$version-hotfix"
|
||||||
|
|
||||||
git -C "apps/frappe" fetch --depth 1 upstream $branch_name:$branch_name
|
git -C "apps/frappe" fetch --depth 1 upstream $branch_name:$branch_name
|
||||||
git -C "apps/erpnext" fetch --depth 1 upstream $branch_name:$branch_name
|
git -C "apps/erpnext" fetch --depth 1 upstream $branch_name:$branch_name
|
||||||
|
@ -342,7 +342,15 @@ def get_pe_matching_query(amount_condition, account_from_to, transaction):
|
|||||||
|
|
||||||
def get_je_matching_query(amount_condition, transaction):
|
def get_je_matching_query(amount_condition, transaction):
|
||||||
# get matching journal entry query
|
# get matching journal entry query
|
||||||
cr_or_dr = "credit" if transaction.withdrawal > 0 else "debit"
|
|
||||||
|
company_account = frappe.get_value("Bank Account", transaction.bank_account, "account")
|
||||||
|
root_type = frappe.get_value("Account", company_account, "root_type")
|
||||||
|
|
||||||
|
if root_type == "Liability":
|
||||||
|
cr_or_dr = "debit" if transaction.withdrawal > 0 else "credit"
|
||||||
|
else:
|
||||||
|
cr_or_dr = "credit" if transaction.withdrawal > 0 else "debit"
|
||||||
|
|
||||||
return f"""
|
return f"""
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
|
@ -2029,7 +2029,7 @@ def get_mode_of_payments_info(mode_of_payments, company):
|
|||||||
mpa.parent = mp.name and
|
mpa.parent = mp.name and
|
||||||
mpa.company = %s and
|
mpa.company = %s and
|
||||||
mp.enabled = 1 and
|
mp.enabled = 1 and
|
||||||
mp.name in (%s)
|
mp.name in %s
|
||||||
group by
|
group by
|
||||||
mp.name
|
mp.name
|
||||||
""", (company, mode_of_payments), as_dict=1)
|
""", (company, mode_of_payments), as_dict=1)
|
||||||
|
0
erpnext/crm/doctype/competitor/__init__.py
Normal file
0
erpnext/crm/doctype/competitor/__init__.py
Normal file
8
erpnext/crm/doctype/competitor/competitor.js
Normal file
8
erpnext/crm/doctype/competitor/competitor.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
// For license information, please see license.txt
|
||||||
|
|
||||||
|
frappe.ui.form.on('Competitor', {
|
||||||
|
// refresh: function(frm) {
|
||||||
|
|
||||||
|
// }
|
||||||
|
});
|
68
erpnext/crm/doctype/competitor/competitor.json
Normal file
68
erpnext/crm/doctype/competitor/competitor.json
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"allow_rename": 1,
|
||||||
|
"autoname": "field:competitor_name",
|
||||||
|
"creation": "2021-10-21 10:28:52.071316",
|
||||||
|
"doctype": "DocType",
|
||||||
|
"editable_grid": 1,
|
||||||
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"competitor_name",
|
||||||
|
"website"
|
||||||
|
],
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldname": "competitor_name",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"in_list_view": 1,
|
||||||
|
"label": "Competitor Name",
|
||||||
|
"reqd": 1,
|
||||||
|
"unique": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_in_quick_entry": 1,
|
||||||
|
"fieldname": "website",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"in_list_view": 1,
|
||||||
|
"label": "Website",
|
||||||
|
"options": "URL"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"index_web_pages_for_search": 1,
|
||||||
|
"links": [],
|
||||||
|
"modified": "2021-10-21 12:43:59.106807",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "CRM",
|
||||||
|
"name": "Competitor",
|
||||||
|
"naming_rule": "By fieldname",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"permissions": [
|
||||||
|
{
|
||||||
|
"create": 1,
|
||||||
|
"delete": 1,
|
||||||
|
"email": 1,
|
||||||
|
"export": 1,
|
||||||
|
"print": 1,
|
||||||
|
"read": 1,
|
||||||
|
"report": 1,
|
||||||
|
"role": "System Manager",
|
||||||
|
"share": 1,
|
||||||
|
"write": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"create": 1,
|
||||||
|
"email": 1,
|
||||||
|
"export": 1,
|
||||||
|
"print": 1,
|
||||||
|
"read": 1,
|
||||||
|
"report": 1,
|
||||||
|
"role": "Sales User",
|
||||||
|
"share": 1,
|
||||||
|
"write": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"quick_entry": 1,
|
||||||
|
"sort_field": "modified",
|
||||||
|
"sort_order": "DESC",
|
||||||
|
"track_changes": 1
|
||||||
|
}
|
9
erpnext/crm/doctype/competitor/competitor.py
Normal file
9
erpnext/crm/doctype/competitor/competitor.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
# import frappe
|
||||||
|
from frappe.model.document import Document
|
||||||
|
|
||||||
|
|
||||||
|
class Competitor(Document):
|
||||||
|
pass
|
9
erpnext/crm/doctype/competitor/test_competitor.py
Normal file
9
erpnext/crm/doctype/competitor/test_competitor.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
|
# See license.txt
|
||||||
|
|
||||||
|
# import frappe
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
|
||||||
|
class TestCompetitor(unittest.TestCase):
|
||||||
|
pass
|
0
erpnext/crm/doctype/competitor_detail/__init__.py
Normal file
0
erpnext/crm/doctype/competitor_detail/__init__.py
Normal file
33
erpnext/crm/doctype/competitor_detail/competitor_detail.json
Normal file
33
erpnext/crm/doctype/competitor_detail/competitor_detail.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"allow_rename": 1,
|
||||||
|
"creation": "2021-10-21 10:34:58.841689",
|
||||||
|
"doctype": "DocType",
|
||||||
|
"editable_grid": 1,
|
||||||
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"competitor"
|
||||||
|
],
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldname": "competitor",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"in_list_view": 1,
|
||||||
|
"label": "Competitor",
|
||||||
|
"options": "Competitor",
|
||||||
|
"reqd": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"index_web_pages_for_search": 1,
|
||||||
|
"istable": 1,
|
||||||
|
"links": [],
|
||||||
|
"modified": "2021-10-21 10:34:58.841689",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "CRM",
|
||||||
|
"name": "Competitor Detail",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"permissions": [],
|
||||||
|
"sort_field": "modified",
|
||||||
|
"sort_order": "DESC",
|
||||||
|
"track_changes": 1
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
# import frappe
|
||||||
|
from frappe.model.document import Document
|
||||||
|
|
||||||
|
|
||||||
|
class CompetitorDetail(Document):
|
||||||
|
pass
|
@ -23,7 +23,6 @@
|
|||||||
"status",
|
"status",
|
||||||
"converted_by",
|
"converted_by",
|
||||||
"sales_stage",
|
"sales_stage",
|
||||||
"order_lost_reason",
|
|
||||||
"first_response_time",
|
"first_response_time",
|
||||||
"expected_closing",
|
"expected_closing",
|
||||||
"next_contact",
|
"next_contact",
|
||||||
@ -64,7 +63,11 @@
|
|||||||
"transaction_date",
|
"transaction_date",
|
||||||
"language",
|
"language",
|
||||||
"amended_from",
|
"amended_from",
|
||||||
"lost_reasons"
|
"lost_detail_section",
|
||||||
|
"lost_reasons",
|
||||||
|
"order_lost_reason",
|
||||||
|
"column_break_56",
|
||||||
|
"competitors"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@ -154,10 +157,9 @@
|
|||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "eval:doc.status===\"Lost\"",
|
|
||||||
"fieldname": "order_lost_reason",
|
"fieldname": "order_lost_reason",
|
||||||
"fieldtype": "Small Text",
|
"fieldtype": "Small Text",
|
||||||
"label": "Lost Reason",
|
"label": "Detailed Reason",
|
||||||
"no_copy": 1,
|
"no_copy": 1,
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
},
|
},
|
||||||
@ -409,6 +411,7 @@
|
|||||||
"width": "150px"
|
"width": "150px"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"depends_on": "eval:doc.status===\"Lost\"",
|
||||||
"fieldname": "lost_reasons",
|
"fieldname": "lost_reasons",
|
||||||
"fieldtype": "Table MultiSelect",
|
"fieldtype": "Table MultiSelect",
|
||||||
"label": "Lost Reasons",
|
"label": "Lost Reasons",
|
||||||
@ -486,15 +489,33 @@
|
|||||||
"label": "Grand Total",
|
"label": "Grand Total",
|
||||||
"options": "currency",
|
"options": "currency",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "lost_detail_section",
|
||||||
|
"fieldtype": "Section Break",
|
||||||
|
"label": "Lost Reasons"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_56",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "competitors",
|
||||||
|
"fieldtype": "Table MultiSelect",
|
||||||
|
"label": "Competitors",
|
||||||
|
"options": "Competitor Detail",
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icon": "fa fa-info-sign",
|
"icon": "fa fa-info-sign",
|
||||||
"idx": 195,
|
"idx": 195,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-09-06 10:02:18.609136",
|
"migration_hash": "d87c646ea2579b6900197fd41e6c5c5a",
|
||||||
|
"modified": "2021-10-21 11:04:30.151379",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "CRM",
|
"module": "CRM",
|
||||||
"name": "Opportunity",
|
"name": "Opportunity",
|
||||||
|
"naming_rule": "By \"Naming Series\" field",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
|
@ -116,16 +116,20 @@ class Opportunity(TransactionBase):
|
|||||||
self.party_name = lead_name
|
self.party_name = lead_name
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def declare_enquiry_lost(self, lost_reasons_list, detailed_reason=None):
|
def declare_enquiry_lost(self, lost_reasons_list, competitors, detailed_reason=None):
|
||||||
if not self.has_active_quotation():
|
if not self.has_active_quotation():
|
||||||
frappe.db.set(self, 'status', 'Lost')
|
self.status = 'Lost'
|
||||||
|
self.lost_reasons = self.competitors = []
|
||||||
|
|
||||||
if detailed_reason:
|
if detailed_reason:
|
||||||
frappe.db.set(self, 'order_lost_reason', detailed_reason)
|
self.order_lost_reason = detailed_reason
|
||||||
|
|
||||||
for reason in lost_reasons_list:
|
for reason in lost_reasons_list:
|
||||||
self.append('lost_reasons', reason)
|
self.append('lost_reasons', reason)
|
||||||
|
|
||||||
|
for competitor in competitors:
|
||||||
|
self.append('competitors', competitor)
|
||||||
|
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -504,13 +504,11 @@ class JobCard(Document):
|
|||||||
self.status = 'Work In Progress'
|
self.status = 'Work In Progress'
|
||||||
|
|
||||||
if (self.docstatus == 1 and
|
if (self.docstatus == 1 and
|
||||||
(self.for_quantity <= self.transferred_qty or not self.items)):
|
(self.for_quantity <= self.total_completed_qty or not self.items)):
|
||||||
# consider excess transfer
|
|
||||||
# completed qty is checked via separate validation
|
|
||||||
self.status = 'Completed'
|
self.status = 'Completed'
|
||||||
|
|
||||||
if self.status != 'Completed':
|
if self.status != 'Completed':
|
||||||
if self.for_quantity == self.transferred_qty:
|
if self.for_quantity <= self.transferred_qty:
|
||||||
self.status = 'Material Transferred'
|
self.status = 'Material Transferred'
|
||||||
|
|
||||||
if update_status:
|
if update_status:
|
||||||
|
@ -303,6 +303,7 @@ erpnext.patches.v13_0.set_status_in_maintenance_schedule_table
|
|||||||
erpnext.patches.v13_0.add_default_interview_notification_templates
|
erpnext.patches.v13_0.add_default_interview_notification_templates
|
||||||
erpnext.patches.v13_0.enable_scheduler_job_for_item_reposting
|
erpnext.patches.v13_0.enable_scheduler_job_for_item_reposting
|
||||||
erpnext.patches.v13_0.requeue_failed_reposts
|
erpnext.patches.v13_0.requeue_failed_reposts
|
||||||
|
erpnext.patches.v13_0.update_job_card_status
|
||||||
erpnext.patches.v12_0.update_production_plan_status
|
erpnext.patches.v12_0.update_production_plan_status
|
||||||
erpnext.patches.v13_0.healthcare_deprecation_warning
|
erpnext.patches.v13_0.healthcare_deprecation_warning
|
||||||
erpnext.patches.v14_0.delete_healthcare_doctypes
|
erpnext.patches.v14_0.delete_healthcare_doctypes
|
||||||
|
@ -5,6 +5,7 @@ from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
|||||||
def execute():
|
def execute():
|
||||||
frappe.reload_doc('buying', 'doctype', 'supplier', force=True)
|
frappe.reload_doc('buying', 'doctype', 'supplier', force=True)
|
||||||
frappe.reload_doc('selling', 'doctype', 'customer', force=True)
|
frappe.reload_doc('selling', 'doctype', 'customer', force=True)
|
||||||
|
frappe.reload_doc('core', 'doctype', 'doctype', force=True)
|
||||||
|
|
||||||
custom_fields = {
|
custom_fields = {
|
||||||
'Supplier': [
|
'Supplier': [
|
||||||
|
18
erpnext/patches/v13_0/update_job_card_status.py
Normal file
18
erpnext/patches/v13_0/update_job_card_status.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Copyright (c) 2021, Frappe and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
|
||||||
|
job_card = frappe.qb.DocType("Job Card")
|
||||||
|
(frappe.qb
|
||||||
|
.update(job_card)
|
||||||
|
.set(job_card.status, "Completed")
|
||||||
|
.where(
|
||||||
|
(job_card.docstatus == 1)
|
||||||
|
& (job_card.for_quantity <= job_card.total_completed_qty)
|
||||||
|
& (job_card.status.isin(["Work In Progress", "Material Transferred"]))
|
||||||
|
)
|
||||||
|
).run()
|
@ -110,7 +110,8 @@
|
|||||||
"enq_det",
|
"enq_det",
|
||||||
"supplier_quotation",
|
"supplier_quotation",
|
||||||
"opportunity",
|
"opportunity",
|
||||||
"lost_reasons"
|
"lost_reasons",
|
||||||
|
"competitors"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
@ -946,6 +947,14 @@
|
|||||||
"label": "Bundle Items",
|
"label": "Bundle Items",
|
||||||
"options": "fa fa-suitcase",
|
"options": "fa fa-suitcase",
|
||||||
"print_hide": 1
|
"print_hide": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_on_submit": 1,
|
||||||
|
"fieldname": "competitors",
|
||||||
|
"fieldtype": "Table MultiSelect",
|
||||||
|
"label": "Competitors",
|
||||||
|
"options": "Competitor Detail",
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icon": "fa fa-shopping-cart",
|
"icon": "fa fa-shopping-cart",
|
||||||
@ -953,10 +962,12 @@
|
|||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"max_attachments": 1,
|
"max_attachments": 1,
|
||||||
"modified": "2021-08-27 20:10:07.864951",
|
"migration_hash": "75a86a19f062c2257bcbc8e6e31c7f1e",
|
||||||
|
"modified": "2021-10-21 12:58:55.514512",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Selling",
|
"module": "Selling",
|
||||||
"name": "Quotation",
|
"name": "Quotation",
|
||||||
|
"naming_rule": "By \"Naming Series\" field",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
{
|
{
|
||||||
|
@ -68,7 +68,7 @@ class Quotation(SellingController):
|
|||||||
opp.set_status(status=status, update=True)
|
opp.set_status(status=status, update=True)
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def declare_enquiry_lost(self, lost_reasons_list, detailed_reason=None):
|
def declare_enquiry_lost(self, lost_reasons_list, competitors, detailed_reason=None):
|
||||||
if not self.has_sales_order():
|
if not self.has_sales_order():
|
||||||
get_lost_reasons = frappe.get_list('Quotation Lost Reason',
|
get_lost_reasons = frappe.get_list('Quotation Lost Reason',
|
||||||
fields = ["name"])
|
fields = ["name"])
|
||||||
@ -84,6 +84,9 @@ class Quotation(SellingController):
|
|||||||
else:
|
else:
|
||||||
frappe.throw(_("Invalid lost reason {0}, please create a new lost reason").format(frappe.bold(reason.get('lost_reason'))))
|
frappe.throw(_("Invalid lost reason {0}, please create a new lost reason").format(frappe.bold(reason.get('lost_reason'))))
|
||||||
|
|
||||||
|
for competitor in competitors:
|
||||||
|
self.append('competitors', competitor)
|
||||||
|
|
||||||
self.update_opportunity('Lost')
|
self.update_opportunity('Lost')
|
||||||
self.update_lead()
|
self.update_lead()
|
||||||
self.save()
|
self.save()
|
||||||
|
@ -473,6 +473,12 @@ frappe.ui.form.on(cur_frm.doctype, {
|
|||||||
"options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
|
"options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"fieldtype": "Table MultiSelect",
|
||||||
|
"label": __("Competitors"),
|
||||||
|
"fieldname": "competitors",
|
||||||
|
"options": "Competitor Detail"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fieldtype": "Text",
|
"fieldtype": "Text",
|
||||||
"label": __("Detailed Reason"),
|
"label": __("Detailed Reason"),
|
||||||
@ -480,23 +486,21 @@ frappe.ui.form.on(cur_frm.doctype, {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
primary_action: function() {
|
primary_action: function() {
|
||||||
var values = dialog.get_values();
|
let values = dialog.get_values();
|
||||||
var reasons = values["lost_reason"];
|
|
||||||
var detailed_reason = values["detailed_reason"];
|
|
||||||
|
|
||||||
frm.call({
|
frm.call({
|
||||||
doc: frm.doc,
|
doc: frm.doc,
|
||||||
method: 'declare_enquiry_lost',
|
method: 'declare_enquiry_lost',
|
||||||
args: {
|
args: {
|
||||||
'lost_reasons_list': reasons,
|
'lost_reasons_list': values.lost_reason,
|
||||||
'detailed_reason': detailed_reason
|
'competitors': values.competitors,
|
||||||
|
'detailed_reason': values.detailed_reason
|
||||||
},
|
},
|
||||||
callback: function(r) {
|
callback: function(r) {
|
||||||
dialog.hide();
|
dialog.hide();
|
||||||
frm.reload_doc();
|
frm.reload_doc();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
refresh_field("lost_reason");
|
|
||||||
},
|
},
|
||||||
primary_action_label: __('Declare Lost')
|
primary_action_label: __('Declare Lost')
|
||||||
});
|
});
|
||||||
|
@ -31,6 +31,9 @@ class RepostItemValuation(Document):
|
|||||||
self.voucher_type = None
|
self.voucher_type = None
|
||||||
self.voucher_no = None
|
self.voucher_no = None
|
||||||
|
|
||||||
|
self.allow_negative_stock = self.allow_negative_stock or \
|
||||||
|
cint(frappe.db.get_single_value("Stock Settings", "allow_negative_stock"))
|
||||||
|
|
||||||
def set_company(self):
|
def set_company(self):
|
||||||
if self.voucher_type and self.voucher_no:
|
if self.voucher_type and self.voucher_no:
|
||||||
self.company = frappe.get_cached_value(self.voucher_type, self.voucher_no, "company")
|
self.company = frappe.get_cached_value(self.voucher_type, self.voucher_no, "company")
|
||||||
|
@ -1450,7 +1450,7 @@ class StockEntry(StockController):
|
|||||||
item_dict[item]["qty"] = 0
|
item_dict[item]["qty"] = 0
|
||||||
|
|
||||||
# delete items with 0 qty
|
# delete items with 0 qty
|
||||||
list_of_items = item_dict.keys()
|
list_of_items = list(item_dict.keys())
|
||||||
for item in list_of_items:
|
for item in list_of_items:
|
||||||
if not item_dict[item]["qty"]:
|
if not item_dict[item]["qty"]:
|
||||||
del item_dict[item]
|
del item_dict[item]
|
||||||
|
@ -46,7 +46,7 @@ def get_incorrect_data(data):
|
|||||||
return row
|
return row
|
||||||
|
|
||||||
def get_stock_ledger_entries(report_filters):
|
def get_stock_ledger_entries(report_filters):
|
||||||
filters = {}
|
filters = {"is_cancelled": 0}
|
||||||
fields = ['name', 'voucher_type', 'voucher_no', 'item_code', 'actual_qty',
|
fields = ['name', 'voucher_type', 'voucher_no', 'item_code', 'actual_qty',
|
||||||
'posting_date', 'posting_time', 'company', 'warehouse', 'qty_after_transaction', 'batch_no']
|
'posting_date', 'posting_time', 'company', 'warehouse', 'qty_after_transaction', 'batch_no']
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user