Merge branch 'develop' into cont-temp
This commit is contained in:
commit
4efbee57f3
@ -245,6 +245,9 @@ def get():
|
|||||||
"account_number": "2200"
|
"account_number": "2200"
|
||||||
},
|
},
|
||||||
_("Duties and Taxes"): {
|
_("Duties and Taxes"): {
|
||||||
|
_("TDS Payable"): {
|
||||||
|
"account_number": "2310"
|
||||||
|
},
|
||||||
"account_type": "Tax",
|
"account_type": "Tax",
|
||||||
"is_group": 1,
|
"is_group": 1,
|
||||||
"account_number": "2300"
|
"account_number": "2300"
|
||||||
|
|||||||
@ -9,11 +9,13 @@ from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sal
|
|||||||
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
|
from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice
|
||||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
||||||
from erpnext.accounts.page.bank_reconciliation.bank_reconciliation import reconcile, get_linked_payments
|
from erpnext.accounts.page.bank_reconciliation.bank_reconciliation import reconcile, get_linked_payments
|
||||||
|
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
|
||||||
|
|
||||||
test_dependencies = ["Item", "Cost Center"]
|
test_dependencies = ["Item", "Cost Center"]
|
||||||
|
|
||||||
class TestBankTransaction(unittest.TestCase):
|
class TestBankTransaction(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
make_pos_profile()
|
||||||
add_transactions()
|
add_transactions()
|
||||||
add_payments()
|
add_payments()
|
||||||
|
|
||||||
@ -27,6 +29,9 @@ class TestBankTransaction(unittest.TestCase):
|
|||||||
frappe.db.sql("""delete from `tabPayment Entry Reference`""")
|
frappe.db.sql("""delete from `tabPayment Entry Reference`""")
|
||||||
frappe.db.sql("""delete from `tabPayment Entry`""")
|
frappe.db.sql("""delete from `tabPayment Entry`""")
|
||||||
|
|
||||||
|
# Delete POS Profile
|
||||||
|
frappe.db.sql("delete from `tabPOS Profile`")
|
||||||
|
|
||||||
frappe.flags.test_bank_transactions_created = False
|
frappe.flags.test_bank_transactions_created = False
|
||||||
frappe.flags.test_payments_created = False
|
frappe.flags.test_payments_created = False
|
||||||
|
|
||||||
|
|||||||
@ -70,6 +70,7 @@ def get_items_list(pos_profile, company):
|
|||||||
""".format(cond=cond), tuple([company] + args_list), as_dict=1)
|
""".format(cond=cond), tuple([company] + args_list), as_dict=1)
|
||||||
|
|
||||||
def make_pos_profile(**args):
|
def make_pos_profile(**args):
|
||||||
|
frappe.db.sql("delete from `tabPOS Payment Method`")
|
||||||
frappe.db.sql("delete from `tabPOS Profile`")
|
frappe.db.sql("delete from `tabPOS Profile`")
|
||||||
|
|
||||||
args = frappe._dict(args)
|
args = frappe._dict(args)
|
||||||
|
|||||||
@ -405,6 +405,8 @@ class SalesInvoice(SellingController):
|
|||||||
from erpnext.stock.get_item_details import get_pos_profile_item_details, get_pos_profile
|
from erpnext.stock.get_item_details import get_pos_profile_item_details, get_pos_profile
|
||||||
if not self.pos_profile:
|
if not self.pos_profile:
|
||||||
pos_profile = get_pos_profile(self.company) or {}
|
pos_profile = get_pos_profile(self.company) or {}
|
||||||
|
if not pos_profile:
|
||||||
|
frappe.throw(_("No POS Profile found. Please create a New POS Profile first"))
|
||||||
self.pos_profile = pos_profile.get('name')
|
self.pos_profile = pos_profile.get('name')
|
||||||
|
|
||||||
pos = {}
|
pos = {}
|
||||||
|
|||||||
@ -690,7 +690,8 @@ class TestSalesInvoice(unittest.TestCase):
|
|||||||
self.assertTrue(gle)
|
self.assertTrue(gle)
|
||||||
|
|
||||||
def test_pos_gl_entry_with_perpetual_inventory(self):
|
def test_pos_gl_entry_with_perpetual_inventory(self):
|
||||||
make_pos_profile()
|
make_pos_profile(company="_Test Company with perpetual inventory", income_account = "Sales - TCP1",
|
||||||
|
expense_account = "Cost of Goods Sold - TCP1", warehouse="Stores - TCP1", cost_center = "Main - TCP1", write_off_account="_Test Write Off - TCP1")
|
||||||
|
|
||||||
pr = make_purchase_receipt(company= "_Test Company with perpetual inventory", item_code= "_Test FG Item",warehouse= "Stores - TCP1",cost_center= "Main - TCP1")
|
pr = make_purchase_receipt(company= "_Test Company with perpetual inventory", item_code= "_Test FG Item",warehouse= "Stores - TCP1",cost_center= "Main - TCP1")
|
||||||
|
|
||||||
@ -746,7 +747,8 @@ class TestSalesInvoice(unittest.TestCase):
|
|||||||
self.assertEqual(pos_return.get('payments')[0].amount, -1000)
|
self.assertEqual(pos_return.get('payments')[0].amount, -1000)
|
||||||
|
|
||||||
def test_pos_change_amount(self):
|
def test_pos_change_amount(self):
|
||||||
make_pos_profile()
|
make_pos_profile(company="_Test Company with perpetual inventory", income_account = "Sales - TCP1",
|
||||||
|
expense_account = "Cost of Goods Sold - TCP1", warehouse="Stores - TCP1", cost_center = "Main - TCP1", write_off_account="_Test Write Off - TCP1")
|
||||||
|
|
||||||
pr = make_purchase_receipt(company= "_Test Company with perpetual inventory",
|
pr = make_purchase_receipt(company= "_Test Company with perpetual inventory",
|
||||||
item_code= "_Test FG Item",warehouse= "Stores - TCP1", cost_center= "Main - TCP1")
|
item_code= "_Test FG Item",warehouse= "Stores - TCP1", cost_center= "Main - TCP1")
|
||||||
|
|||||||
@ -78,7 +78,10 @@ def get_fiscal_years(transaction_date=None, fiscal_year=None, label="Date", verb
|
|||||||
else:
|
else:
|
||||||
return ((fy.name, fy.year_start_date, fy.year_end_date),)
|
return ((fy.name, fy.year_start_date, fy.year_end_date),)
|
||||||
|
|
||||||
error_msg = _("""{0} {1} not in any active Fiscal Year.""").format(label, formatdate(transaction_date))
|
error_msg = _("""{0} {1} is not in any active Fiscal Year""").format(label, formatdate(transaction_date))
|
||||||
|
if company:
|
||||||
|
error_msg = _("""{0} for {1}""").format(error_msg, frappe.bold(company))
|
||||||
|
|
||||||
if verbose==1: frappe.msgprint(error_msg)
|
if verbose==1: frappe.msgprint(error_msg)
|
||||||
raise FiscalYearError(error_msg)
|
raise FiscalYearError(error_msg)
|
||||||
|
|
||||||
|
|||||||
@ -168,6 +168,7 @@
|
|||||||
"bold": 1,
|
"bold": 1,
|
||||||
"fieldname": "supplier",
|
"fieldname": "supplier",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
"in_global_search": 1,
|
||||||
"in_standard_filter": 1,
|
"in_standard_filter": 1,
|
||||||
"label": "Supplier",
|
"label": "Supplier",
|
||||||
"oldfieldname": "supplier",
|
"oldfieldname": "supplier",
|
||||||
@ -1106,7 +1107,7 @@
|
|||||||
"idx": 105,
|
"idx": 105,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2020-10-30 13:58:14.697921",
|
"modified": "2020-12-03 16:46:44.229351",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Buying",
|
"module": "Buying",
|
||||||
"name": "Purchase Order",
|
"name": "Purchase Order",
|
||||||
|
|||||||
@ -42,7 +42,7 @@ class SellingController(StockController):
|
|||||||
self.validate_max_discount()
|
self.validate_max_discount()
|
||||||
self.validate_selling_price()
|
self.validate_selling_price()
|
||||||
self.set_qty_as_per_stock_uom()
|
self.set_qty_as_per_stock_uom()
|
||||||
self.set_po_nos()
|
self.set_po_nos(for_validate=True)
|
||||||
self.set_gross_profit()
|
self.set_gross_profit()
|
||||||
set_default_income_account_for_item(self)
|
set_default_income_account_for_item(self)
|
||||||
self.set_customer_address()
|
self.set_customer_address()
|
||||||
@ -370,20 +370,28 @@ class SellingController(StockController):
|
|||||||
}))
|
}))
|
||||||
self.make_sl_entries(sl_entries)
|
self.make_sl_entries(sl_entries)
|
||||||
|
|
||||||
def set_po_nos(self):
|
def set_po_nos(self, for_validate=False):
|
||||||
if self.doctype == 'Sales Invoice' and hasattr(self, "items"):
|
if self.doctype == 'Sales Invoice' and hasattr(self, "items"):
|
||||||
|
if for_validate and self.po_no:
|
||||||
|
return
|
||||||
self.set_pos_for_sales_invoice()
|
self.set_pos_for_sales_invoice()
|
||||||
if self.doctype == 'Delivery Note' and hasattr(self, "items"):
|
if self.doctype == 'Delivery Note' and hasattr(self, "items"):
|
||||||
|
if for_validate and self.po_no:
|
||||||
|
return
|
||||||
self.set_pos_for_delivery_note()
|
self.set_pos_for_delivery_note()
|
||||||
|
|
||||||
def set_pos_for_sales_invoice(self):
|
def set_pos_for_sales_invoice(self):
|
||||||
po_nos = []
|
po_nos = []
|
||||||
|
if self.po_no:
|
||||||
|
po_nos.append(self.po_no)
|
||||||
self.get_po_nos('Sales Order', 'sales_order', po_nos)
|
self.get_po_nos('Sales Order', 'sales_order', po_nos)
|
||||||
self.get_po_nos('Delivery Note', 'delivery_note', po_nos)
|
self.get_po_nos('Delivery Note', 'delivery_note', po_nos)
|
||||||
self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(','))))
|
self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(','))))
|
||||||
|
|
||||||
def set_pos_for_delivery_note(self):
|
def set_pos_for_delivery_note(self):
|
||||||
po_nos = []
|
po_nos = []
|
||||||
|
if self.po_no:
|
||||||
|
po_nos.append(self.po_no)
|
||||||
self.get_po_nos('Sales Order', 'against_sales_order', po_nos)
|
self.get_po_nos('Sales Order', 'against_sales_order', po_nos)
|
||||||
self.get_po_nos('Sales Invoice', 'against_sales_invoice', po_nos)
|
self.get_po_nos('Sales Invoice', 'against_sales_invoice', po_nos)
|
||||||
self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(','))))
|
self.po_no = ', '.join(list(set(x.strip() for x in ','.join(po_nos).split(','))))
|
||||||
|
|||||||
@ -641,7 +641,8 @@ class calculate_taxes_and_totals(object):
|
|||||||
if default_mode_of_payment:
|
if default_mode_of_payment:
|
||||||
self.doc.append('payments', {
|
self.doc.append('payments', {
|
||||||
'mode_of_payment': default_mode_of_payment.mode_of_payment,
|
'mode_of_payment': default_mode_of_payment.mode_of_payment,
|
||||||
'amount': total_amount_to_pay
|
'amount': total_amount_to_pay,
|
||||||
|
'default': 1
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
self.doc.is_pos = 0
|
self.doc.is_pos = 0
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import frappe
|
|||||||
import unittest
|
import unittest
|
||||||
from frappe.utils import nowdate, add_days
|
from frappe.utils import nowdate, add_days
|
||||||
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_healthcare_docs, create_appointment, create_healthcare_service_items
|
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_healthcare_docs, create_appointment, create_healthcare_service_items
|
||||||
|
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
|
||||||
|
|
||||||
test_dependencies = ["Company"]
|
test_dependencies = ["Company"]
|
||||||
|
|
||||||
@ -15,6 +16,7 @@ class TestFeeValidity(unittest.TestCase):
|
|||||||
frappe.db.sql("""delete from `tabPatient Appointment`""")
|
frappe.db.sql("""delete from `tabPatient Appointment`""")
|
||||||
frappe.db.sql("""delete from `tabFee Validity`""")
|
frappe.db.sql("""delete from `tabFee Validity`""")
|
||||||
frappe.db.sql("""delete from `tabPatient`""")
|
frappe.db.sql("""delete from `tabPatient`""")
|
||||||
|
make_pos_profile()
|
||||||
|
|
||||||
def test_fee_validity(self):
|
def test_fee_validity(self):
|
||||||
item = create_healthcare_service_items()
|
item = create_healthcare_service_items()
|
||||||
|
|||||||
@ -7,12 +7,14 @@ import frappe
|
|||||||
from erpnext.healthcare.doctype.patient_appointment.patient_appointment import update_status, make_encounter
|
from erpnext.healthcare.doctype.patient_appointment.patient_appointment import update_status, make_encounter
|
||||||
from frappe.utils import nowdate, add_days
|
from frappe.utils import nowdate, add_days
|
||||||
from frappe.utils.make_random import get_random
|
from frappe.utils.make_random import get_random
|
||||||
|
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
|
||||||
|
|
||||||
class TestPatientAppointment(unittest.TestCase):
|
class TestPatientAppointment(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
frappe.db.sql("""delete from `tabPatient Appointment`""")
|
frappe.db.sql("""delete from `tabPatient Appointment`""")
|
||||||
frappe.db.sql("""delete from `tabFee Validity`""")
|
frappe.db.sql("""delete from `tabFee Validity`""")
|
||||||
frappe.db.sql("""delete from `tabPatient Encounter`""")
|
frappe.db.sql("""delete from `tabPatient Encounter`""")
|
||||||
|
make_pos_profile()
|
||||||
|
|
||||||
def test_status(self):
|
def test_status(self):
|
||||||
patient, medical_department, practitioner = create_healthcare_docs()
|
patient, medical_department, practitioner = create_healthcare_docs()
|
||||||
|
|||||||
@ -6,11 +6,13 @@ import unittest
|
|||||||
import frappe
|
import frappe
|
||||||
from frappe.utils import nowdate
|
from frappe.utils import nowdate
|
||||||
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_encounter, create_healthcare_docs, create_appointment
|
from erpnext.healthcare.doctype.patient_appointment.test_patient_appointment import create_encounter, create_healthcare_docs, create_appointment
|
||||||
|
from erpnext.accounts.doctype.pos_profile.test_pos_profile import make_pos_profile
|
||||||
|
|
||||||
class TestPatientMedicalRecord(unittest.TestCase):
|
class TestPatientMedicalRecord(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
frappe.db.set_value('Healthcare Settings', None, 'enable_free_follow_ups', 0)
|
frappe.db.set_value('Healthcare Settings', None, 'enable_free_follow_ups', 0)
|
||||||
frappe.db.set_value('Healthcare Settings', None, 'automate_appointment_invoicing', 1)
|
frappe.db.set_value('Healthcare Settings', None, 'automate_appointment_invoicing', 1)
|
||||||
|
make_pos_profile()
|
||||||
|
|
||||||
def test_medical_record(self):
|
def test_medical_record(self):
|
||||||
patient, medical_department, practitioner = create_healthcare_docs()
|
patient, medical_department, practitioner = create_healthcare_docs()
|
||||||
|
|||||||
@ -441,42 +441,43 @@ global_search_doctypes = {
|
|||||||
{"doctype": "Sales Order", "index": 8},
|
{"doctype": "Sales Order", "index": 8},
|
||||||
{"doctype": "Quotation", "index": 9},
|
{"doctype": "Quotation", "index": 9},
|
||||||
{"doctype": "Work Order", "index": 10},
|
{"doctype": "Work Order", "index": 10},
|
||||||
{"doctype": "Purchase Receipt", "index": 11},
|
{"doctype": "Purchase Order", "index": 11},
|
||||||
{"doctype": "Purchase Invoice", "index": 12},
|
{"doctype": "Purchase Receipt", "index": 12},
|
||||||
{"doctype": "Delivery Note", "index": 13},
|
{"doctype": "Purchase Invoice", "index": 13},
|
||||||
{"doctype": "Stock Entry", "index": 14},
|
{"doctype": "Delivery Note", "index": 14},
|
||||||
{"doctype": "Material Request", "index": 15},
|
{"doctype": "Stock Entry", "index": 15},
|
||||||
{"doctype": "Delivery Trip", "index": 16},
|
{"doctype": "Material Request", "index": 16},
|
||||||
{"doctype": "Pick List", "index": 17},
|
{"doctype": "Delivery Trip", "index": 17},
|
||||||
{"doctype": "Salary Slip", "index": 18},
|
{"doctype": "Pick List", "index": 18},
|
||||||
{"doctype": "Leave Application", "index": 19},
|
{"doctype": "Salary Slip", "index": 19},
|
||||||
{"doctype": "Expense Claim", "index": 20},
|
{"doctype": "Leave Application", "index": 20},
|
||||||
{"doctype": "Payment Entry", "index": 21},
|
{"doctype": "Expense Claim", "index": 21},
|
||||||
{"doctype": "Lead", "index": 22},
|
{"doctype": "Payment Entry", "index": 22},
|
||||||
{"doctype": "Opportunity", "index": 23},
|
{"doctype": "Lead", "index": 23},
|
||||||
{"doctype": "Item Price", "index": 24},
|
{"doctype": "Opportunity", "index": 24},
|
||||||
{"doctype": "Purchase Taxes and Charges Template", "index": 25},
|
{"doctype": "Item Price", "index": 25},
|
||||||
{"doctype": "Sales Taxes and Charges", "index": 26},
|
{"doctype": "Purchase Taxes and Charges Template", "index": 26},
|
||||||
{"doctype": "Asset", "index": 27},
|
{"doctype": "Sales Taxes and Charges", "index": 27},
|
||||||
{"doctype": "Project", "index": 28},
|
{"doctype": "Asset", "index": 28},
|
||||||
{"doctype": "Task", "index": 29},
|
{"doctype": "Project", "index": 29},
|
||||||
{"doctype": "Timesheet", "index": 30},
|
{"doctype": "Task", "index": 30},
|
||||||
{"doctype": "Issue", "index": 31},
|
{"doctype": "Timesheet", "index": 31},
|
||||||
{"doctype": "Serial No", "index": 32},
|
{"doctype": "Issue", "index": 32},
|
||||||
{"doctype": "Batch", "index": 33},
|
{"doctype": "Serial No", "index": 33},
|
||||||
{"doctype": "Branch", "index": 34},
|
{"doctype": "Batch", "index": 34},
|
||||||
{"doctype": "Department", "index": 35},
|
{"doctype": "Branch", "index": 35},
|
||||||
{"doctype": "Employee Grade", "index": 36},
|
{"doctype": "Department", "index": 36},
|
||||||
{"doctype": "Designation", "index": 37},
|
{"doctype": "Employee Grade", "index": 37},
|
||||||
{"doctype": "Job Opening", "index": 38},
|
{"doctype": "Designation", "index": 38},
|
||||||
{"doctype": "Job Applicant", "index": 39},
|
{"doctype": "Job Opening", "index": 39},
|
||||||
{"doctype": "Job Offer", "index": 40},
|
{"doctype": "Job Applicant", "index": 40},
|
||||||
{"doctype": "Salary Structure Assignment", "index": 41},
|
{"doctype": "Job Offer", "index": 41},
|
||||||
{"doctype": "Appraisal", "index": 42},
|
{"doctype": "Salary Structure Assignment", "index": 42},
|
||||||
{"doctype": "Loan", "index": 43},
|
{"doctype": "Appraisal", "index": 43},
|
||||||
{"doctype": "Maintenance Schedule", "index": 44},
|
{"doctype": "Loan", "index": 44},
|
||||||
{"doctype": "Maintenance Visit", "index": 45},
|
{"doctype": "Maintenance Schedule", "index": 45},
|
||||||
{"doctype": "Warranty Claim", "index": 46},
|
{"doctype": "Maintenance Visit", "index": 46},
|
||||||
|
{"doctype": "Warranty Claim", "index": 47},
|
||||||
],
|
],
|
||||||
"Healthcare": [
|
"Healthcare": [
|
||||||
{'doctype': 'Patient', 'index': 1},
|
{'doctype': 'Patient', 'index': 1},
|
||||||
|
|||||||
@ -124,7 +124,7 @@ class ProductionPlanReport(object):
|
|||||||
if self.filters.include_subassembly_raw_materials else "(bom_item.qty / bom.quantity)")
|
if self.filters.include_subassembly_raw_materials else "(bom_item.qty / bom.quantity)")
|
||||||
|
|
||||||
raw_materials = frappe.db.sql(""" SELECT bom_item.parent, bom_item.item_code,
|
raw_materials = frappe.db.sql(""" SELECT bom_item.parent, bom_item.item_code,
|
||||||
bom_item.item_name as raw_material_name, {0} as required_qty
|
bom_item.item_name as raw_material_name, {0} as required_qty_per_unit
|
||||||
FROM
|
FROM
|
||||||
`tabBOM` as bom, `tab{1}` as bom_item
|
`tabBOM` as bom, `tab{1}` as bom_item
|
||||||
WHERE
|
WHERE
|
||||||
@ -208,7 +208,7 @@ class ProductionPlanReport(object):
|
|||||||
warehouses = self.mrp_warehouses or []
|
warehouses = self.mrp_warehouses or []
|
||||||
for d in self.raw_materials_dict.get(key):
|
for d in self.raw_materials_dict.get(key):
|
||||||
if self.filters.based_on != "Work Order":
|
if self.filters.based_on != "Work Order":
|
||||||
d.required_qty = d.required_qty * data.qty_to_manufacture
|
d.required_qty = d.required_qty_per_unit * data.qty_to_manufacture
|
||||||
|
|
||||||
if not warehouses:
|
if not warehouses:
|
||||||
warehouses = [data.warehouse]
|
warehouses = [data.warehouse]
|
||||||
|
|||||||
@ -739,4 +739,5 @@ erpnext.patches.v13_0.update_custom_fields_for_shopify
|
|||||||
execute:frappe.delete_doc("Report", "Quoted Item Comparison")
|
execute:frappe.delete_doc("Report", "Quoted Item Comparison")
|
||||||
erpnext.patches.v13_0.updates_for_multi_currency_payroll
|
erpnext.patches.v13_0.updates_for_multi_currency_payroll
|
||||||
erpnext.patches.v13_0.create_leave_policy_assignment_based_on_employee_current_leave_policy
|
erpnext.patches.v13_0.create_leave_policy_assignment_based_on_employee_current_leave_policy
|
||||||
|
erpnext.patches.v13_0.add_po_to_global_search
|
||||||
erpnext.patches.v13_0.update_returned_qty_in_pr_dn
|
erpnext.patches.v13_0.update_returned_qty_in_pr_dn
|
||||||
|
|||||||
17
erpnext/patches/v13_0/add_po_to_global_search.py
Normal file
17
erpnext/patches/v13_0/add_po_to_global_search.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
global_search_settings = frappe.get_single("Global Search Settings")
|
||||||
|
|
||||||
|
if "Purchase Order" in (
|
||||||
|
dt.document_type for dt in global_search_settings.allowed_in_global_search
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
|
global_search_settings.append(
|
||||||
|
"allowed_in_global_search", {"document_type": "Purchase Order"}
|
||||||
|
)
|
||||||
|
|
||||||
|
global_search_settings.save(ignore_permissions=True)
|
||||||
@ -29,7 +29,7 @@ def execute():
|
|||||||
'response_by_variance': response_by_variance,
|
'response_by_variance': response_by_variance,
|
||||||
'resolution_by_variance': resolution_by_variance,
|
'resolution_by_variance': resolution_by_variance,
|
||||||
'first_response_time': mins_to_first_response
|
'first_response_time': mins_to_first_response
|
||||||
})
|
}, update_modified=False)
|
||||||
# commit after every 100 updates
|
# commit after every 100 updates
|
||||||
count += 1
|
count += 1
|
||||||
if count%100 == 0:
|
if count%100 == 0:
|
||||||
@ -44,7 +44,7 @@ def execute():
|
|||||||
count = 0
|
count = 0
|
||||||
for entry in opportunities:
|
for entry in opportunities:
|
||||||
mins_to_first_response = convert_to_seconds(entry.mins_to_first_response, 'Minutes')
|
mins_to_first_response = convert_to_seconds(entry.mins_to_first_response, 'Minutes')
|
||||||
frappe.db.set_value('Opportunity', entry.name, 'first_response_time', mins_to_first_response)
|
frappe.db.set_value('Opportunity', entry.name, 'first_response_time', mins_to_first_response, update_modified=False)
|
||||||
# commit after every 100 updates
|
# commit after every 100 updates
|
||||||
count += 1
|
count += 1
|
||||||
if count%100 == 0:
|
if count%100 == 0:
|
||||||
|
|||||||
@ -289,7 +289,9 @@ class PayrollEntry(Document):
|
|||||||
jv_name = journal_entry.name
|
jv_name = journal_entry.name
|
||||||
self.update_salary_slip_status(jv_name = jv_name)
|
self.update_salary_slip_status(jv_name = jv_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
frappe.msgprint(e)
|
if type(e) in (str, list, tuple):
|
||||||
|
frappe.msgprint(e)
|
||||||
|
raise
|
||||||
|
|
||||||
return jv_name
|
return jv_name
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,7 @@ frappe.ui.form.on("Sales Order", {
|
|||||||
frm.custom_make_buttons = {
|
frm.custom_make_buttons = {
|
||||||
'Delivery Note': 'Delivery Note',
|
'Delivery Note': 'Delivery Note',
|
||||||
'Pick List': 'Pick List',
|
'Pick List': 'Pick List',
|
||||||
'Sales Invoice': 'Invoice',
|
'Sales Invoice': 'Sales Invoice',
|
||||||
'Material Request': 'Material Request',
|
'Material Request': 'Material Request',
|
||||||
'Purchase Order': 'Purchase Order',
|
'Purchase Order': 'Purchase Order',
|
||||||
'Project': 'Project',
|
'Project': 'Project',
|
||||||
|
|||||||
@ -1,25 +1,5 @@
|
|||||||
{
|
{
|
||||||
"cards": [
|
"cards": [
|
||||||
{
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Healthcare",
|
|
||||||
"links": "[\n {\n \"label\": \"Patient\",\n \"name\": \"Patient\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Diagnosis\",\n \"name\": \"Diagnosis\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n }\n]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Agriculture",
|
|
||||||
"links": "[\n {\n \"label\": \"Crop\",\n \"name\": \"Crop\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Crop Cycle\",\n \"name\": \"Crop Cycle\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Location\",\n \"name\": \"Location\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Fertilizer\",\n \"name\": \"Fertilizer\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n }\n]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Education",
|
|
||||||
"links": "[\n {\n \"label\": \"Student\",\n \"name\": \"Student\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Course\",\n \"name\": \"Course\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Instructor\",\n \"name\": \"Instructor\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"label\": \"Room\",\n \"name\": \"Room\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n }\n]"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"hidden": 0,
|
|
||||||
"label": "Non Profit",
|
|
||||||
"links": "[\n {\n \"description\": \"Member information.\",\n \"label\": \"Member\",\n \"name\": \"Member\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Volunteer information.\",\n \"label\": \"Volunteer\",\n \"name\": \"Volunteer\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Chapter information.\",\n \"label\": \"Chapter\",\n \"name\": \"Chapter\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n },\n {\n \"description\": \"Donor information.\",\n \"label\": \"Donor\",\n \"name\": \"Donor\",\n \"onboard\": 1,\n \"type\": \"doctype\"\n }\n]"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"hidden": 0,
|
"hidden": 0,
|
||||||
"label": "Stock",
|
"label": "Stock",
|
||||||
@ -54,10 +34,11 @@
|
|||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Desk Page",
|
"doctype": "Desk Page",
|
||||||
"extends_another_page": 0,
|
"extends_another_page": 0,
|
||||||
|
"hide_custom": 0,
|
||||||
"idx": 0,
|
"idx": 0,
|
||||||
"is_standard": 1,
|
"is_standard": 1,
|
||||||
"label": "Home",
|
"label": "Home",
|
||||||
"modified": "2020-05-11 10:20:37.358701",
|
"modified": "2020-12-07 14:22:38.667767",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Setup",
|
"module": "Setup",
|
||||||
"name": "Home",
|
"name": "Home",
|
||||||
@ -96,4 +77,4 @@
|
|||||||
"type": "Page"
|
"type": "Page"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user