From 9e056ec1ced1474ccc4229abe7f4955406c84ba1 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 20 Jan 2014 17:46:37 +0530 Subject: [PATCH 1/4] Auto closing of tickets through schedulers --- erpnext/hooks.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/hooks.txt b/erpnext/hooks.txt index 0c8b71a98f4..a52ea2d29ae 100644 --- a/erpnext/hooks.txt +++ b/erpnext/hooks.txt @@ -53,6 +53,7 @@ scheduler_event = daily:erpnext.accounts.doctype.sales_invoice.sales_invoice.man scheduler_event = daily:erpnext.setup.doctype.backup_manager.backup_manager.take_backups_daily scheduler_event = daily:erpnext.stock.utils.reorder_item scheduler_event = daily:erpnext.setup.doctype.email_digest.email_digest.send +scheduler_event = daily:support.doctype.support_ticket.support_ticket.auto_close_tickets #### Weekly From 5ae6a61c4d1fcae9a129c36ae70528c938b543de Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 23 Jan 2014 15:33:30 +0530 Subject: [PATCH 2/4] Fixes related to appifing shopping cart --- .../accounts/doctype/account/test_account.py | 2 +- .../sales_invoice/test_sales_invoice.py | 2 +- erpnext/controllers/accounts_controller.py | 4 +-- .../setup/doctype/item_group/item_group.py | 27 +------------------ .../doctype/sales_partner/sales_partner.py | 8 +----- erpnext/stock/doctype/item/item.py | 20 +------------- 6 files changed, 7 insertions(+), 56 deletions(-) diff --git a/erpnext/accounts/doctype/account/test_account.py b/erpnext/accounts/doctype/account/test_account.py index 2d15b626045..3221901e24a 100644 --- a/erpnext/accounts/doctype/account/test_account.py +++ b/erpnext/accounts/doctype/account/test_account.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import webnotes -def make_test_records(verbose): +def _make_test_records(verbose): from webnotes.test_runner import make_test_objects accounts = [ diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 02350c5abc3..3092477e4f8 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -668,7 +668,7 @@ class TestSalesInvoice(unittest.TestCase): def test_recurring_invoice(self): from webnotes.utils import get_first_day, get_last_day, add_to_date, nowdate, getdate - from accounts.utils import get_fiscal_year + from erpnext.accounts.utils import get_fiscal_year today = nowdate() base_si = webnotes.bean(copy=test_records[0]) base_si.doc.fields.update({ diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index ccfff8ad51a..26159074740 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -48,7 +48,7 @@ class AccountsController(TransactionBase): {"master_type": fieldname.title(), "master_name": self.doc.fields[fieldname], "company": self.doc.company}, "name") if accounts: - from accounts.doctype.gl_entry.gl_entry import validate_frozen_account + from erpnext.accounts.doctype.gl_entry.gl_entry import validate_frozen_account for account in accounts: validate_frozen_account(account[0]) @@ -413,7 +413,7 @@ class AccountsController(TransactionBase): }) def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on, parentfield): - from controllers.status_updater import get_tolerance_for + from erpnext.controllers.status_updater import get_tolerance_for item_tolerance = {} global_tolerance = None diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py index 02fe374c133..7e79c950387 100644 --- a/erpnext/setup/doctype/item_group/item_group.py +++ b/erpnext/setup/doctype/item_group/item_group.py @@ -5,10 +5,8 @@ from __future__ import unicode_literals import webnotes from webnotes.utils.nestedset import DocTypeNestedSet -from webnotes.webutils import WebsiteGenerator -from webnotes.webutils import delete_page_cache -class DocType(DocTypeNestedSet, WebsiteGenerator): +class DocType(DocTypeNestedSet): def __init__(self, doc, doclist=[]): self.doc = doc self.doclist = doclist @@ -16,35 +14,12 @@ class DocType(DocTypeNestedSet, WebsiteGenerator): def on_update(self): DocTypeNestedSet.on_update(self) - WebsiteGenerator.on_update(self) self.validate_name_with_item() - invalidate_cache_for(self.doc.name) - self.validate_one_root() def validate_name_with_item(self): if webnotes.conn.exists("Item", self.doc.name): webnotes.msgprint("An item exists with same name (%s), please change the \ item group name or rename the item" % self.doc.name, raise_exception=1) - -def get_group_item_count(item_group): - child_groups = ", ".join(['"' + i[0] + '"' for i in get_child_groups(item_group)]) - return webnotes.conn.sql("""select count(*) from `tabItem` - where docstatus = 0 and show_in_website = 1 - and (item_group in (%s) - or name in (select parent from `tabWebsite Item Group` - where item_group in (%s))) """ % (child_groups, child_groups))[0][0] - -def get_parent_item_groups(item_group_name): - item_group = webnotes.doc("Item Group", item_group_name) - return webnotes.conn.sql("""select name, page_name from `tabItem Group` - where lft <= %s and rgt >= %s - and ifnull(show_in_website,0)=1 - order by lft asc""", (item_group.lft, item_group.rgt), as_dict=True) - -def invalidate_cache_for(item_group): - for i in get_parent_item_groups(item_group): - if i.page_name: - delete_page_cache(i.page_name) diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.py b/erpnext/setup/doctype/sales_partner/sales_partner.py index c2309e8a550..cf9a863a86a 100644 --- a/erpnext/setup/doctype/sales_partner/sales_partner.py +++ b/erpnext/setup/doctype/sales_partner/sales_partner.py @@ -4,9 +4,8 @@ from __future__ import unicode_literals import webnotes from webnotes.utils import cint, cstr, filter_strip_join -from webnotes.webutils import WebsiteGenerator, clear_cache -class DocType(WebsiteGenerator): +class DocType(): def __init__(self, doc, doclist=None): self.doc = doc self.doclist = doclist @@ -15,11 +14,6 @@ class DocType(WebsiteGenerator): if self.doc.partner_website and not self.doc.partner_website.startswith("http"): self.doc.partner_website = "http://" + self.doc.partner_website - def on_update(self): - WebsiteGenerator.on_update(self) - if self.doc.page_name: - clear_cache("partners") - def get_contacts(self,nm): if nm: contact_details =webnotes.conn.convert_to_lists(webnotes.conn.sql("select name, CONCAT(IFNULL(first_name,''),' ',IFNULL(last_name,'')),contact_no,email_id from `tabContact` where sales_partner = '%s'"%nm)) diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index fb6f73d3355..16938b40270 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -8,13 +8,12 @@ from webnotes.utils import cstr, flt from webnotes.model.doc import addchild from webnotes.model.bean import getlist from webnotes import msgprint, _ -from webnotes.webutils import WebsiteGenerator from webnotes.model.controller import DocListController class WarehouseNotSet(Exception): pass -class DocType(DocListController, WebsiteGenerator): +class DocType(DocListController): def onload(self): self.doc.fields["__sle_exists"] = self.check_if_sle_exists() @@ -48,7 +47,6 @@ class DocType(DocListController, WebsiteGenerator): def on_update(self): self.validate_name_with_item_group() - self.update_website() self.update_item_price() def check_warehouse_is_set_for_stock_item(self): @@ -197,14 +195,6 @@ class DocType(DocListController, WebsiteGenerator): please change the item name or rename the item group" % self.doc.name, raise_exception=1) - def update_website(self): - from erpnext.setup.doctype.item_group.item_group import invalidate_cache_for - invalidate_cache_for(self.doc.item_group) - [invalidate_cache_for(d.item_group) for d in \ - self.doclist.get({"doctype":"Website Item Group"})] - - WebsiteGenerator.on_update(self) - def update_item_price(self): webnotes.conn.sql("""update `tabItem Price` set item_name=%s, item_description=%s, modified=NOW() where item_code=%s""", @@ -232,7 +222,6 @@ class DocType(DocListController, WebsiteGenerator): def on_trash(self): webnotes.conn.sql("""delete from tabBin where item_code=%s""", self.doc.item_code) - WebsiteGenerator.on_trash(self) def before_rename(self, olddn, newdn, merge=False): if merge: @@ -250,18 +239,11 @@ class DocType(DocListController, WebsiteGenerator): def after_rename(self, olddn, newdn, merge): webnotes.conn.set_value("Item", newdn, "item_code", newdn) - self.update_website_page_name() if merge: self.set_last_purchase_rate(newdn) self.recalculate_bin_qty(newdn) - def update_website_page_name(self): - if self.doc.page_name: - self.update_website() - from webnotes.webutils import clear_cache - clear_cache(self.doc.page_name) - def set_last_purchase_rate(self, newdn): from erpnext.buying.utils import get_last_purchase_details last_purchase_rate = get_last_purchase_details(newdn).get("purchase_rate", 0) From 4ba95d0b7a998374e26b647a0257170541852bcd Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 23 Jan 2014 16:45:22 +0530 Subject: [PATCH 3/4] Fix in testcases --- .../buying/doctype/purchase_order/test_purchase_order.py | 2 +- erpnext/controllers/accounts_controller.py | 3 ++- erpnext/stock/doctype/item/test_item.py | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index e151970b06a..2aede0843ce 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -74,7 +74,7 @@ class TestPurchaseOrder(unittest.TestCase): self.assertEquals(flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 0.0) - def test_make_purchase_invocie(self): + def test_make_purchase_invoice(self): from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice po = webnotes.bean(copy=test_records[0]).insert() diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 26159074740..937449c6a2e 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -134,7 +134,8 @@ class AccountsController(TransactionBase): def calculate_taxes_and_totals(self): self.discount_amount_applied = False self._calculate_taxes_and_totals() - if self.meta.get_field(self.doc.doctype, "discount_amount"): + + if self.meta.get_field("discount_amount"): self.apply_discount_amount() def _calculate_taxes_and_totals(self): diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py index 3cf1d5ecf69..00ce548567f 100644 --- a/erpnext/stock/doctype/item/test_item.py +++ b/erpnext/stock/doctype/item/test_item.py @@ -36,6 +36,7 @@ test_records = [ "stock_uom": "_Test UOM", "default_income_account": "Sales - _TC", "default_warehouse": "_Test Warehouse - _TC", + "purchase_account": "_Test Account Cost for Goods Sold - _TC" }, { "doctype": "Item Reorder", "parentfield": "item_reorder", @@ -64,6 +65,7 @@ test_records = [ "stock_uom": "_Test UOM", "default_income_account": "Sales - _TC", "default_warehouse": "_Test Warehouse - _TC", + "purchase_account": "_Test Account Cost for Goods Sold - _TC" }], [{ "doctype": "Item", @@ -73,6 +75,7 @@ test_records = [ "item_group": "_Test Item Group Desktops", "default_warehouse": "_Test Warehouse - _TC", "default_income_account": "Sales - _TC", + "purchase_account": "_Test Account Cost for Goods Sold - _TC", "is_stock_item": "Yes", "is_asset_item": "No", "has_batch_no": "No", @@ -99,6 +102,7 @@ test_records = [ "item_group": "_Test Item Group Desktops", "default_warehouse": "_Test Warehouse - _TC", "default_income_account": "Sales - _TC", + "purchase_account": "_Test Account Cost for Goods Sold - _TC", "is_stock_item": "Yes", "is_asset_item": "No", "has_batch_no": "No", @@ -119,6 +123,7 @@ test_records = [ "description": "_Test Sales BOM Item", "item_group": "_Test Item Group Desktops", "default_income_account": "Sales - _TC", + "purchase_account": "_Test Account Cost for Goods Sold - _TC", "is_stock_item": "No", "is_asset_item": "No", "has_batch_no": "No", @@ -140,6 +145,7 @@ test_records = [ "is_stock_item": "Yes", "default_warehouse": "_Test Warehouse - _TC", "default_income_account": "Sales - _TC", + "purchase_account": "_Test Account Cost for Goods Sold - _TC", "is_asset_item": "No", "has_batch_no": "No", "has_serial_no": "No", @@ -216,6 +222,7 @@ test_records = [ "item_group": "_Test Item Group Desktops", "default_warehouse": "_Test Warehouse - _TC", "default_income_account": "Sales - _TC", + "purchase_account": "_Test Account Cost for Goods Sold - _TC", "is_stock_item": "Yes", "is_asset_item": "No", "has_batch_no": "No", @@ -238,6 +245,7 @@ test_records = [ "is_stock_item": "Yes", "default_warehouse": "_Test Warehouse - _TC", "default_income_account": "Sales - _TC", + "purchase_account": "_Test Account Cost for Goods Sold - _TC", "is_asset_item": "No", "has_batch_no": "No", "has_serial_no": "No", From 93eab5521cbf7347e464cab7f3352efcea9a9f71 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 23 Jan 2014 17:58:03 +0530 Subject: [PATCH 4/4] Minor fix in path --- erpnext/accounts/doctype/sales_invoice/sales_invoice.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 1a1fa9f66bb..2362f3f2024 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -241,8 +241,8 @@ cur_frm.cscript.hide_fields = function(doc) { cur_frm.cscript.mode_of_payment = function(doc) { return cur_frm.call({ - method: "get_bank_cash_account", - args: { mode_of_payment: doc.mode_of_payment } + method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account", + args: { mode_of_payment: doc.mode_of_payment }, }); } @@ -255,9 +255,6 @@ cur_frm.cscript.is_opening = function(doc, dt, dn) { if (doc.is_opening == 'Yes') unhide_field('aging_date'); } -//Make Delivery Note Button -//----------------------------- - cur_frm.cscript['Make Delivery Note'] = function() { wn.model.open_mapped_doc({ method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.make_delivery_note",