Merge branch 'develop' into crm-carry-forward-communication-comments
This commit is contained in:
commit
1c0fa3c231
@ -23,6 +23,17 @@ class TestLead(unittest.TestCase):
|
||||
customer.customer_group = "_Test Customer Group"
|
||||
customer.insert()
|
||||
|
||||
#check whether lead contact is carried forward to the customer.
|
||||
contact = frappe.db.get_value('Dynamic Link', {
|
||||
"parenttype": "Contact",
|
||||
"link_doctype": "Lead",
|
||||
"link_name": customer.lead_name,
|
||||
}, "parent")
|
||||
|
||||
if contact:
|
||||
contact_doc = frappe.get_doc("Contact", contact)
|
||||
self.assertEqual(contact_doc.has_link(customer.doctype, customer.name), True)
|
||||
|
||||
def test_make_customer_from_organization(self):
|
||||
from erpnext.crm.doctype.lead.lead import make_customer
|
||||
|
||||
|
@ -1,78 +0,0 @@
|
||||
{
|
||||
"charts": [],
|
||||
"content": "[{\"type\": \"header\", \"data\": {\"text\": \"Reports & Masters\", \"level\": 4, \"col\": 12}}, {\"type\": \"card\", \"data\": {\"card_name\": \"Integrations Settings\", \"col\": 4}}]",
|
||||
"creation": "2020-07-31 10:38:54.021237",
|
||||
"docstatus": 0,
|
||||
"doctype": "Workspace",
|
||||
"for_user": "",
|
||||
"hide_custom": 0,
|
||||
"icon": "setting",
|
||||
"idx": 0,
|
||||
"label": "ERPNext Integrations Settings",
|
||||
"links": [
|
||||
{
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Integrations Settings",
|
||||
"link_count": 0,
|
||||
"onboard": 0,
|
||||
"type": "Card Break"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Woocommerce Settings",
|
||||
"link_count": 0,
|
||||
"link_to": "Woocommerce Settings",
|
||||
"link_type": "DocType",
|
||||
"onboard": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Amazon MWS Settings",
|
||||
"link_count": 0,
|
||||
"link_to": "Amazon MWS Settings",
|
||||
"link_type": "DocType",
|
||||
"onboard": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Plaid Settings",
|
||||
"link_count": 0,
|
||||
"link_to": "Plaid Settings",
|
||||
"link_type": "DocType",
|
||||
"onboard": 0,
|
||||
"type": "Link"
|
||||
},
|
||||
{
|
||||
"dependencies": "",
|
||||
"hidden": 0,
|
||||
"is_query_report": 0,
|
||||
"label": "Exotel Settings",
|
||||
"link_count": 0,
|
||||
"link_to": "Exotel Settings",
|
||||
"link_type": "DocType",
|
||||
"onboard": 0,
|
||||
"type": "Link"
|
||||
}
|
||||
],
|
||||
"modified": "2021-11-23 04:30:33.106991",
|
||||
"modified_by": "Administrator",
|
||||
"module": "ERPNext Integrations",
|
||||
"name": "ERPNext Integrations Settings",
|
||||
"owner": "Administrator",
|
||||
"parent_page": "",
|
||||
"public": 1,
|
||||
"restrict_to_domain": "",
|
||||
"roles": [],
|
||||
"sequence_id": 11,
|
||||
"shortcuts": [],
|
||||
"title": "ERPNext Integrations Settings"
|
||||
}
|
@ -171,7 +171,7 @@ frappe.ui.form.on("Expense Claim", {
|
||||
['docstatus', '=', 1],
|
||||
['employee', '=', frm.doc.employee],
|
||||
['paid_amount', '>', 0],
|
||||
['paid_amount', '>', 'claimed_amount']
|
||||
['status', '!=', 'Claimed']
|
||||
]
|
||||
};
|
||||
});
|
||||
|
@ -10,15 +10,17 @@ from erpnext.accounts.doctype.account.test_account import create_account
|
||||
from erpnext.hr.doctype.employee.test_employee import make_employee
|
||||
from erpnext.hr.doctype.expense_claim.expense_claim import make_bank_entry
|
||||
|
||||
test_records = frappe.get_test_records('Expense Claim')
|
||||
test_dependencies = ['Employee']
|
||||
company_name = '_Test Company 4'
|
||||
company_name = '_Test Company 3'
|
||||
|
||||
|
||||
class TestExpenseClaim(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
frappe.db.rollback()
|
||||
|
||||
def test_total_expense_claim_for_project(self):
|
||||
frappe.db.sql("""delete from `tabTask` where project = "_Test Project 1" """)
|
||||
frappe.db.sql("""delete from `tabProject` where name = "_Test Project 1" """)
|
||||
frappe.db.sql("""delete from `tabTask`""")
|
||||
frappe.db.sql("""delete from `tabProject`""")
|
||||
frappe.db.sql("update `tabExpense Claim` set project = '', task = ''")
|
||||
|
||||
project = frappe.get_doc({
|
||||
@ -37,12 +39,12 @@ class TestExpenseClaim(unittest.TestCase):
|
||||
task_name = task.name
|
||||
payable_account = get_payable_account(company_name)
|
||||
|
||||
make_expense_claim(payable_account, 300, 200, company_name, "Travel Expenses - _TC4", project.name, task_name)
|
||||
make_expense_claim(payable_account, 300, 200, company_name, "Travel Expenses - _TC3", project.name, task_name)
|
||||
|
||||
self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 200)
|
||||
self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 200)
|
||||
|
||||
expense_claim2 = make_expense_claim(payable_account, 600, 500, company_name, "Travel Expenses - _TC4", project.name, task_name)
|
||||
expense_claim2 = make_expense_claim(payable_account, 600, 500, company_name, "Travel Expenses - _TC3", project.name, task_name)
|
||||
|
||||
self.assertEqual(frappe.db.get_value("Task", task_name, "total_expense_claim"), 700)
|
||||
self.assertEqual(frappe.db.get_value("Project", project.name, "total_expense_claim"), 700)
|
||||
@ -54,7 +56,7 @@ class TestExpenseClaim(unittest.TestCase):
|
||||
|
||||
def test_expense_claim_status(self):
|
||||
payable_account = get_payable_account(company_name)
|
||||
expense_claim = make_expense_claim(payable_account, 300, 200, company_name, "Travel Expenses - _TC4")
|
||||
expense_claim = make_expense_claim(payable_account, 300, 200, company_name, "Travel Expenses - _TC3")
|
||||
|
||||
je_dict = make_bank_entry("Expense Claim", expense_claim.name)
|
||||
je = frappe.get_doc(je_dict)
|
||||
@ -73,7 +75,7 @@ class TestExpenseClaim(unittest.TestCase):
|
||||
def test_expense_claim_gl_entry(self):
|
||||
payable_account = get_payable_account(company_name)
|
||||
taxes = generate_taxes()
|
||||
expense_claim = make_expense_claim(payable_account, 300, 200, company_name, "Travel Expenses - _TC4",
|
||||
expense_claim = make_expense_claim(payable_account, 300, 200, company_name, "Travel Expenses - _TC3",
|
||||
do_not_submit=True, taxes=taxes)
|
||||
expense_claim.submit()
|
||||
|
||||
@ -84,9 +86,9 @@ class TestExpenseClaim(unittest.TestCase):
|
||||
self.assertTrue(gl_entries)
|
||||
|
||||
expected_values = dict((d[0], d) for d in [
|
||||
['Output Tax CGST - _TC4',18.0, 0.0],
|
||||
['Output Tax CGST - _TC3',18.0, 0.0],
|
||||
[payable_account, 0.0, 218.0],
|
||||
["Travel Expenses - _TC4", 200.0, 0.0]
|
||||
["Travel Expenses - _TC3", 200.0, 0.0]
|
||||
])
|
||||
|
||||
for gle in gl_entries:
|
||||
@ -102,7 +104,7 @@ class TestExpenseClaim(unittest.TestCase):
|
||||
"payable_account": payable_account,
|
||||
"approval_status": "Rejected",
|
||||
"expenses":
|
||||
[{ "expense_type": "Travel", "default_account": "Travel Expenses - _TC4", "amount": 300, "sanctioned_amount": 200 }]
|
||||
[{"expense_type": "Travel", "default_account": "Travel Expenses - _TC3", "amount": 300, "sanctioned_amount": 200}]
|
||||
})
|
||||
expense_claim.submit()
|
||||
|
||||
|
@ -1 +0,0 @@
|
||||
[]
|
@ -12,15 +12,11 @@ from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type
|
||||
class TestLeaveAllocation(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list
|
||||
|
||||
frappe.db.sql("delete from `tabLeave Period`")
|
||||
|
||||
emp_id = make_employee("test_emp_leave_allocation@salary.com")
|
||||
cls.employee = frappe.get_doc("Employee", emp_id)
|
||||
|
||||
make_holiday_list()
|
||||
frappe.db.set_value("Company", erpnext.get_default_company(), "default_holiday_list", "Salary Slip Test Holiday List")
|
||||
|
||||
def tearDown(self):
|
||||
frappe.db.rollback()
|
||||
|
||||
@ -90,6 +86,8 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
|
||||
# initial leave allocation = 15
|
||||
leave_allocation = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name,
|
||||
leave_type="_Test_CF_leave",
|
||||
from_date=add_months(nowdate(), -12),
|
||||
to_date=add_months(nowdate(), -1),
|
||||
@ -99,6 +97,8 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
# carry forwarded leaves considering maximum_carry_forwarded_leaves
|
||||
# new_leaves = 15, carry_forwarded = 10
|
||||
leave_allocation_1 = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name,
|
||||
leave_type="_Test_CF_leave",
|
||||
carry_forward=1)
|
||||
leave_allocation_1.submit()
|
||||
@ -110,6 +110,8 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
# carry forwarded leaves considering max_leave_allowed
|
||||
# max_leave_allowed = 30, new_leaves = 25, carry_forwarded = 5
|
||||
leave_allocation_2 = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name,
|
||||
leave_type="_Test_CF_leave",
|
||||
carry_forward=1,
|
||||
new_leaves_allocated=25)
|
||||
@ -126,6 +128,8 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
|
||||
# initial leave allocation
|
||||
leave_allocation = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name,
|
||||
leave_type="_Test_CF_leave_expiry",
|
||||
from_date=add_months(nowdate(), -24),
|
||||
to_date=add_months(nowdate(), -12),
|
||||
@ -133,6 +137,8 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
leave_allocation.submit()
|
||||
|
||||
leave_allocation = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name,
|
||||
leave_type="_Test_CF_leave_expiry",
|
||||
from_date=add_days(nowdate(), -90),
|
||||
to_date=add_days(nowdate(), 100),
|
||||
@ -144,6 +150,8 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
|
||||
# leave allocation with carry forward of only new leaves allocated
|
||||
leave_allocation_1 = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name,
|
||||
leave_type="_Test_CF_leave_expiry",
|
||||
carry_forward=1,
|
||||
from_date=add_months(nowdate(), 6),
|
||||
@ -153,7 +161,10 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
self.assertEqual(leave_allocation_1.unused_leaves, leave_allocation.new_leaves_allocated)
|
||||
|
||||
def test_creation_of_leave_ledger_entry_on_submit(self):
|
||||
leave_allocation = create_leave_allocation()
|
||||
leave_allocation = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name
|
||||
)
|
||||
leave_allocation.submit()
|
||||
|
||||
leave_ledger_entry = frappe.get_all('Leave Ledger Entry', fields='*', filters=dict(transaction_name=leave_allocation.name))
|
||||
@ -168,7 +179,10 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
self.assertFalse(frappe.db.exists("Leave Ledger Entry", {'transaction_name':leave_allocation.name}))
|
||||
|
||||
def test_leave_addition_after_submit(self):
|
||||
leave_allocation = create_leave_allocation()
|
||||
leave_allocation = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name
|
||||
)
|
||||
leave_allocation.submit()
|
||||
self.assertTrue(leave_allocation.total_leaves_allocated, 15)
|
||||
leave_allocation.new_leaves_allocated = 40
|
||||
@ -176,7 +190,10 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
self.assertTrue(leave_allocation.total_leaves_allocated, 40)
|
||||
|
||||
def test_leave_subtraction_after_submit(self):
|
||||
leave_allocation = create_leave_allocation()
|
||||
leave_allocation = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name
|
||||
)
|
||||
leave_allocation.submit()
|
||||
self.assertTrue(leave_allocation.total_leaves_allocated, 15)
|
||||
leave_allocation.new_leaves_allocated = 10
|
||||
@ -184,7 +201,15 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
self.assertTrue(leave_allocation.total_leaves_allocated, 10)
|
||||
|
||||
def test_validation_against_leave_application_after_submit(self):
|
||||
leave_allocation = create_leave_allocation()
|
||||
from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list
|
||||
|
||||
make_holiday_list()
|
||||
frappe.db.set_value("Company", self.employee.company, "default_holiday_list", "Salary Slip Test Holiday List")
|
||||
|
||||
leave_allocation = create_leave_allocation(
|
||||
employee=self.employee.name,
|
||||
employee_name=self.employee.employee_name
|
||||
)
|
||||
leave_allocation.submit()
|
||||
self.assertTrue(leave_allocation.total_leaves_allocated, 15)
|
||||
|
||||
@ -194,7 +219,7 @@ class TestLeaveAllocation(unittest.TestCase):
|
||||
"leave_type": "_Test Leave Type",
|
||||
"from_date": add_months(nowdate(), 2),
|
||||
"to_date": add_months(add_days(nowdate(), 10), 2),
|
||||
"company": erpnext.get_default_company() or "_Test Company",
|
||||
"company": self.employee.company,
|
||||
"docstatus": 1,
|
||||
"status": "Approved",
|
||||
"leave_approver": 'test@example.com'
|
||||
|
@ -317,4 +317,6 @@ erpnext.patches.v14_0.rename_ongoing_status_in_sla_documents
|
||||
erpnext.patches.v14_0.migrate_crm_settings
|
||||
erpnext.patches.v13_0.rename_ksa_qr_field
|
||||
erpnext.patches.v13_0.disable_ksa_print_format_for_others # 16-12-2021
|
||||
erpnext.patches.v14_0.add_default_exit_questionnaire_notification_template
|
||||
erpnext.patches.v14_0.add_default_exit_questionnaire_notification_template
|
||||
erpnext.patches.v13_0.update_tax_category_for_rcm
|
||||
execute:frappe.delete_doc_if_exists('Workspace', 'ERPNext Integrations Settings')
|
||||
|
@ -22,4 +22,5 @@ def execute():
|
||||
|
||||
delivery_settings = frappe.get_doc("Delivery Settings")
|
||||
delivery_settings.dispatch_template = _("Dispatch Notification")
|
||||
delivery_settings.flags.ignore_links = True
|
||||
delivery_settings.save()
|
||||
|
@ -97,6 +97,8 @@ def execute():
|
||||
'itc_central_tax': 0,
|
||||
'itc_cess_amount': 0
|
||||
})
|
||||
if not gst_accounts:
|
||||
continue
|
||||
|
||||
if d.account_head in gst_accounts.get('igst_account'):
|
||||
amount_map[d.parent]['itc_integrated_tax'] += d.amount
|
||||
|
@ -32,4 +32,5 @@ def execute():
|
||||
hr_settings = frappe.get_doc('HR Settings')
|
||||
hr_settings.interview_reminder_template = _('Interview Reminder')
|
||||
hr_settings.feedback_reminder_notification_template = _('Interview Feedback Reminder')
|
||||
hr_settings.flags.ignore_links = True
|
||||
hr_settings.save()
|
||||
|
31
erpnext/patches/v13_0/update_tax_category_for_rcm.py
Normal file
31
erpnext/patches/v13_0/update_tax_category_for_rcm.py
Normal file
@ -0,0 +1,31 @@
|
||||
import frappe
|
||||
from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
|
||||
|
||||
from erpnext.regional.india import states
|
||||
|
||||
|
||||
def execute():
|
||||
company = frappe.get_all('Company', filters = {'country': 'India'})
|
||||
if not company:
|
||||
return
|
||||
|
||||
create_custom_fields({
|
||||
'Tax Category': [
|
||||
dict(fieldname='is_inter_state', label='Is Inter State',
|
||||
fieldtype='Check', insert_after='disabled', print_hide=1),
|
||||
dict(fieldname='is_reverse_charge', label='Is Reverse Charge', fieldtype='Check',
|
||||
insert_after='is_inter_state', print_hide=1),
|
||||
dict(fieldname='tax_category_column_break', fieldtype='Column Break',
|
||||
insert_after='is_reverse_charge'),
|
||||
dict(fieldname='gst_state', label='Source State', fieldtype='Select',
|
||||
options='\n'.join(states), insert_after='company')
|
||||
]
|
||||
}, update=True)
|
||||
|
||||
tax_category = frappe.qb.DocType("Tax Category")
|
||||
|
||||
frappe.qb.update(tax_category).set(
|
||||
tax_category.is_reverse_charge, 1
|
||||
).where(
|
||||
tax_category.name.isin(['Reverse Charge Out-State', 'Reverse Charge In-State'])
|
||||
).run()
|
@ -24,4 +24,5 @@ def execute():
|
||||
|
||||
hr_settings = frappe.get_doc("HR Settings")
|
||||
hr_settings.exit_questionnaire_notification_template = template
|
||||
hr_settings.flags.ignore_links = True
|
||||
hr_settings.save()
|
||||
|
@ -680,7 +680,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
|
||||
var item = frappe.get_doc(cdt, cdn);
|
||||
frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
|
||||
|
||||
// check if child doctype is Sales Order Item/Qutation Item and calculate the rate
|
||||
// check if child doctype is Sales Order Item/Quotation Item and calculate the rate
|
||||
if (in_list(["Quotation Item", "Sales Order Item", "Delivery Note Item", "Sales Invoice Item", "POS Invoice Item", "Purchase Invoice Item", "Purchase Order Item", "Purchase Receipt Item"]), cdt)
|
||||
this.apply_pricing_rule_on_item(item);
|
||||
else
|
||||
@ -1582,25 +1582,27 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
|
||||
|
||||
_set_values_for_item_list(children) {
|
||||
var me = this;
|
||||
var price_list_rate_changed = false;
|
||||
var items_rule_dict = {};
|
||||
|
||||
for(var i=0, l=children.length; i<l; i++) {
|
||||
var d = children[i];
|
||||
var d = children[i] ;
|
||||
let item_row = frappe.get_doc(d.doctype, d.name);
|
||||
var existing_pricing_rule = frappe.model.get_value(d.doctype, d.name, "pricing_rules");
|
||||
for(var k in d) {
|
||||
var v = d[k];
|
||||
if (["doctype", "name"].indexOf(k)===-1) {
|
||||
if(k=="price_list_rate") {
|
||||
if(flt(v) != flt(d.price_list_rate)) price_list_rate_changed = true;
|
||||
item_row['rate'] = v;
|
||||
}
|
||||
|
||||
if (k !== 'free_item_data') {
|
||||
frappe.model.set_value(d.doctype, d.name, k, v);
|
||||
item_row[k] = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
frappe.model.round_floats_in(item_row, ["price_list_rate", "discount_percentage"]);
|
||||
|
||||
// if pricing rule set as blank from an existing value, apply price_list
|
||||
if(!me.frm.doc.ignore_pricing_rule && existing_pricing_rule && !d.pricing_rules) {
|
||||
me.apply_price_list(frappe.get_doc(d.doctype, d.name));
|
||||
@ -1617,9 +1619,10 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
|
||||
}
|
||||
}
|
||||
|
||||
me.frm.refresh_field('items');
|
||||
me.apply_rule_on_other_items(items_rule_dict);
|
||||
|
||||
if(!price_list_rate_changed) me.calculate_taxes_and_totals();
|
||||
me.calculate_taxes_and_totals();
|
||||
}
|
||||
|
||||
apply_rule_on_other_items(args) {
|
||||
|
@ -277,8 +277,10 @@ def get_custom_fields():
|
||||
inter_state_gst_field = [
|
||||
dict(fieldname='is_inter_state', label='Is Inter State',
|
||||
fieldtype='Check', insert_after='disabled', print_hide=1),
|
||||
dict(fieldname='is_reverse_charge', label='Is Reverse Charge', fieldtype='Check',
|
||||
insert_after='is_inter_state', print_hide=1),
|
||||
dict(fieldname='tax_category_column_break', fieldtype='Column Break',
|
||||
insert_after='is_inter_state'),
|
||||
insert_after='is_reverse_charge'),
|
||||
dict(fieldname='gst_state', label='Source State', fieldtype='Select',
|
||||
options='\n'.join(states), insert_after='company')
|
||||
]
|
||||
|
@ -67,7 +67,8 @@ def validate_pan_for_india(doc, method):
|
||||
frappe.throw(_("Invalid PAN No. The input you've entered doesn't match the format of PAN."))
|
||||
|
||||
def validate_tax_category(doc, method):
|
||||
if doc.get('gst_state') and frappe.db.get_value('Tax Category', {'gst_state': doc.gst_state, 'is_inter_state': doc.is_inter_state}):
|
||||
if doc.get('gst_state') and frappe.db.get_value('Tax Category', {'gst_state': doc.gst_state, 'is_inter_state': doc.is_inter_state,
|
||||
'is_reverse_charge': doc.is_reverse_charge}):
|
||||
if doc.is_inter_state:
|
||||
frappe.throw(_("Inter State tax category for GST State {0} already exists").format(doc.gst_state))
|
||||
else:
|
||||
@ -264,7 +265,7 @@ def get_tax_template_based_on_category(master_doctype, company, party_details):
|
||||
|
||||
def get_tax_template(master_doctype, company, is_inter_state, state_code):
|
||||
tax_categories = frappe.get_all('Tax Category', fields = ['name', 'is_inter_state', 'gst_state'],
|
||||
filters = {'is_inter_state': is_inter_state})
|
||||
filters = {'is_inter_state': is_inter_state, 'is_reverse_charge': 0})
|
||||
|
||||
default_tax = ''
|
||||
|
||||
|
@ -196,20 +196,19 @@ class Customer(TransactionBase):
|
||||
if not lead.lead_name:
|
||||
frappe.throw(_("Please mention the Lead Name in Lead {0}").format(self.lead_name))
|
||||
|
||||
if lead.company_name:
|
||||
contact_names = frappe.get_all('Dynamic Link', filters={
|
||||
"parenttype":"Contact",
|
||||
"link_doctype":"Lead",
|
||||
"link_name":self.lead_name
|
||||
}, fields=["parent as name"])
|
||||
contact_names = frappe.get_all('Dynamic Link', filters={
|
||||
"parenttype":"Contact",
|
||||
"link_doctype":"Lead",
|
||||
"link_name":self.lead_name
|
||||
}, fields=["parent as name"])
|
||||
|
||||
for contact_name in contact_names:
|
||||
contact = frappe.get_doc('Contact', contact_name.get('name'))
|
||||
if not contact.has_link('Customer', self.name):
|
||||
contact.append('links', dict(link_doctype='Customer', link_name=self.name))
|
||||
contact.save(ignore_permissions=self.flags.ignore_permissions)
|
||||
for contact_name in contact_names:
|
||||
contact = frappe.get_doc('Contact', contact_name.get('name'))
|
||||
if not contact.has_link('Customer', self.name):
|
||||
contact.append('links', dict(link_doctype='Customer', link_name=self.name))
|
||||
contact.save(ignore_permissions=self.flags.ignore_permissions)
|
||||
|
||||
else:
|
||||
if not contact_names:
|
||||
lead.lead_name = lead.lead_name.lstrip().split(" ")
|
||||
lead.first_name = lead.lead_name[0]
|
||||
lead.last_name = " ".join(lead.lead_name[1:])
|
||||
|
@ -1178,11 +1178,13 @@
|
||||
{
|
||||
"title": "Reverse Charge In-State",
|
||||
"is_inter_state": 0,
|
||||
"is_reverse_charge": 1,
|
||||
"gst_state": ""
|
||||
},
|
||||
{
|
||||
"title": "Reverse Charge Out-State",
|
||||
"is_inter_state": 1,
|
||||
"is_reverse_charge": 1,
|
||||
"gst_state": ""
|
||||
},
|
||||
{
|
||||
|
@ -1097,7 +1097,7 @@ def apply_price_list(args, as_doc=False):
|
||||
}
|
||||
|
||||
def apply_price_list_on_item(args):
|
||||
item_doc = frappe.get_doc("Item", args.item_code)
|
||||
item_doc = frappe.db.get_value("Item", args.item_code, ['name', 'variant_of'], as_dict=1)
|
||||
item_details = get_price_list_rate(args, item_doc)
|
||||
|
||||
item_details.update(get_pricing_rule_for_item(args, item_details.price_list_rate))
|
||||
|
Loading…
Reference in New Issue
Block a user