From 9106221ea4ffc049da7bf31ca2c71531b6b248b5 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 10 Oct 2013 18:43:34 +0530 Subject: [PATCH] [minor] fixes after merge with master --- .../sales_invoice/test_sales_invoice.py | 10 ++--- .../voucher_import_tool.py | 14 +++---- .../purchase_order/test_purchase_order.py | 6 +-- controllers/buying_controller.py | 2 - .../doctype/backup_manager/backup_dropbox.py | 4 +- .../delivery_note/test_delivery_note.py | 6 +-- .../material_request/test_material_request.py | 4 +- .../purchase_receipt/purchase_receipt.py | 2 +- .../purchase_receipt/test_purchase_receipt.py | 3 +- stock/doctype/serial_no/serial_no.py | 40 +++++++++++-------- stock/doctype/stock_entry/stock_entry.py | 2 +- stock/doctype/stock_entry/test_stock_entry.py | 7 ++-- .../stock_ledger_entry/stock_ledger_entry.py | 6 +-- stock/utils.py | 18 ++++----- 14 files changed, 64 insertions(+), 60 deletions(-) diff --git a/accounts/doctype/sales_invoice/test_sales_invoice.py b/accounts/doctype/sales_invoice/test_sales_invoice.py index dee098a3e4f..9f5b95cd79c 100644 --- a/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -641,8 +641,8 @@ class TestSalesInvoice(unittest.TestCase): return new_si - # if yearly, test 3 repetitions, else test 13 repetitions - count = 3 if no_of_months == 12 else 13 + # if yearly, test 1 repetition, else test 5 repetitions + count = 1 if (no_of_months == 12) else 5 for i in xrange(count): base_si = _test(i) @@ -653,7 +653,7 @@ class TestSalesInvoice(unittest.TestCase): def test_serialized(self): from stock.doctype.stock_entry.test_stock_entry import make_serialized_item - from stock.doctype.stock_ledger_entry.stock_ledger_entry import get_serial_nos + from stock.doctype.serial_no.serial_no import get_serial_nos se = make_serialized_item() serial_nos = get_serial_nos(se.doclist[1].serial_no) @@ -674,7 +674,7 @@ class TestSalesInvoice(unittest.TestCase): return si def test_serialized_cancel(self): - from stock.doctype.stock_ledger_entry.stock_ledger_entry import get_serial_nos + from stock.doctype.serial_no.serial_no import get_serial_nos si = self.test_serialized() si.cancel() @@ -686,7 +686,7 @@ class TestSalesInvoice(unittest.TestCase): "delivery_document_no")) def test_serialize_status(self): - from stock.doctype.stock_ledger_entry.stock_ledger_entry import SerialNoStatusError, get_serial_nos + from stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos from stock.doctype.stock_entry.test_stock_entry import make_serialized_item se = make_serialized_item() diff --git a/accounts/page/voucher_import_tool/voucher_import_tool.py b/accounts/page/voucher_import_tool/voucher_import_tool.py index 9425afc7d0f..14e30be7a9e 100644 --- a/accounts/page/voucher_import_tool/voucher_import_tool.py +++ b/accounts/page/voucher_import_tool/voucher_import_tool.py @@ -64,10 +64,10 @@ def upload(): data, start_idx = get_data(rows, company_abbr, rows[0][0]) except Exception, e: - err_msg = webnotes.message_log and "
".join(webnotes.message_log) or cstr(e) + err_msg = webnotes.local.message_log and "
".join(webnotes.local.message_log) or cstr(e) messages.append("""

%s

""" % (err_msg or "No message")) webnotes.errprint(webnotes.getTraceback()) - webnotes.message_log = [] + webnotes.local.message_log = [] return messages return import_vouchers(common_values, data, start_idx, rows[0][0]) @@ -117,11 +117,11 @@ def import_vouchers(common_values, data, start_idx, import_type): d = data[i][0] if import_type == "Voucher Import: Two Accounts" and flt(d.get("amount")) == 0: - webnotes.message_log = ["Amount not specified"] + webnotes.local.message_log = ["Amount not specified"] raise Exception elif import_type == "Voucher Import: Multiple Accounts" and \ (flt(d.get("total_debit")) == 0 or flt(d.get("total_credit")) == 0): - webnotes.message_log = ["Total Debit and Total Credit amount can not be zero"] + webnotes.local.message_log = ["Total Debit and Total Credit amount can not be zero"] raise Exception else: d.posting_date = parse_date(d.posting_date) @@ -174,7 +174,7 @@ def import_vouchers(common_values, data, start_idx, import_type): details.append(detail) if not details: - webnotes.message_log = ["""No accounts found. + webnotes.local.message_log = ["""No accounts found. If you entered accounts correctly, please check template once"""] raise Exception @@ -193,12 +193,12 @@ def import_vouchers(common_values, data, start_idx, import_type): webnotes.conn.commit() except Exception, e: webnotes.conn.rollback() - err_msg = webnotes.message_log and "
".join(webnotes.message_log) or cstr(e) + err_msg = webnotes.local.message_log and "
".join(webnotes.local.message_log) or cstr(e) messages.append("""

[row #%s] %s failed: %s

""" % ((start_idx + 1) + i, jv.name or "", err_msg or "No message")) messages.append("

All transactions rolled back

") webnotes.errprint(webnotes.getTraceback()) - webnotes.message_log = [] + webnotes.local.message_log = [] return messages diff --git a/buying/doctype/purchase_order/test_purchase_order.py b/buying/doctype/purchase_order/test_purchase_order.py index cef5e4a207b..e9a9c348a62 100644 --- a/buying/doctype/purchase_order/test_purchase_order.py +++ b/buying/doctype/purchase_order/test_purchase_order.py @@ -98,12 +98,12 @@ class TestPurchaseOrder(unittest.TestCase): self.assertEquals(len(po.doclist.get({"parentfield": "po_raw_material_details"})), 2) def test_warehouse_company_validation(self): - from controllers.buying_controller import WrongWarehouseCompany + from stock.utils import InvalidWarehouseCompany po = webnotes.bean(copy=test_records[0]) po.doc.company = "_Test Company 1" po.doc.conversion_rate = 0.0167 - self.assertRaises(WrongWarehouseCompany, po.insert) - + self.assertRaises(InvalidWarehouseCompany, po.insert) + def test_uom_integer_validation(self): from utilities.transaction_base import UOMMustBeIntegerError po = webnotes.bean(copy=test_records[0]) diff --git a/controllers/buying_controller.py b/controllers/buying_controller.py index 2e55aee1357..c42eda50bc9 100644 --- a/controllers/buying_controller.py +++ b/controllers/buying_controller.py @@ -11,8 +11,6 @@ from setup.utils import get_company_currency from controllers.stock_controller import StockController -class WrongWarehouseCompany(Exception): pass - class BuyingController(StockController): def onload_post_render(self): diff --git a/setup/doctype/backup_manager/backup_dropbox.py b/setup/doctype/backup_manager/backup_dropbox.py index b4a8f66d4c0..3d3f428260a 100644 --- a/setup/doctype/backup_manager/backup_dropbox.py +++ b/setup/doctype/backup_manager/backup_dropbox.py @@ -61,8 +61,8 @@ def dropbox_callback(oauth_token=None, not_approved=False): allowed = 0 message = "Dropbox Access not approved." - webnotes.message_title = "Dropbox Approval" - webnotes.message = "

%s

Please close this window.

" % message + webnotes.local.message_title = "Dropbox Approval" + webnotes.local.message = "

%s

Please close this window.

" % message webnotes.conn.commit() webnotes.response['type'] = 'page' diff --git a/stock/doctype/delivery_note/test_delivery_note.py b/stock/doctype/delivery_note/test_delivery_note.py index 7c525504ae4..ca95a506026 100644 --- a/stock/doctype/delivery_note/test_delivery_note.py +++ b/stock/doctype/delivery_note/test_delivery_note.py @@ -160,7 +160,7 @@ class TestDeliveryNote(unittest.TestCase): def test_serialized(self): from stock.doctype.stock_entry.test_stock_entry import make_serialized_item - from stock.doctype.stock_ledger_entry.stock_ledger_entry import get_serial_nos + from stock.doctype.serial_no.serial_no import get_serial_nos se = make_serialized_item() serial_nos = get_serial_nos(se.doclist[1].serial_no) @@ -180,7 +180,7 @@ class TestDeliveryNote(unittest.TestCase): return dn def test_serialized_cancel(self): - from stock.doctype.stock_ledger_entry.stock_ledger_entry import get_serial_nos + from stock.doctype.serial_no.serial_no import get_serial_nos dn = self.test_serialized() dn.cancel() @@ -192,7 +192,7 @@ class TestDeliveryNote(unittest.TestCase): "delivery_document_no")) def test_serialize_status(self): - from stock.doctype.stock_ledger_entry.stock_ledger_entry import SerialNoStatusError, get_serial_nos + from stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos from stock.doctype.stock_entry.test_stock_entry import make_serialized_item se = make_serialized_item() diff --git a/stock/doctype/material_request/test_material_request.py b/stock/doctype/material_request/test_material_request.py index 8ebad15810a..13fdd02c3ca 100644 --- a/stock/doctype/material_request/test_material_request.py +++ b/stock/doctype/material_request/test_material_request.py @@ -315,10 +315,10 @@ class TestMaterialRequest(unittest.TestCase): self.assertRaises(webnotes.MappingMismatchError, se.insert) def test_warehouse_company_validation(self): - from controllers.buying_controller import WrongWarehouseCompany + from stock.utils import InvalidWarehouseCompany mr = webnotes.bean(copy=test_records[0]) mr.doc.company = "_Test Company 1" - self.assertRaises(WrongWarehouseCompany, mr.insert) + self.assertRaises(InvalidWarehouseCompany, mr.insert) test_dependencies = ["Currency Exchange"] test_records = [ diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py index 2dd450febb9..537d75d339e 100644 --- a/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/stock/doctype/purchase_receipt/purchase_receipt.py @@ -242,7 +242,7 @@ class DocType(BuyingController): self.update_stock() from stock.doctype.serial_no.serial_no import update_serial_nos_after_submit - update_serial_nos_after_submit(self, "Purchase Receipt", "purchase_receipt_details") + update_serial_nos_after_submit(self, "purchase_receipt_details") purchase_controller.update_last_purchase_rate(self, 1) diff --git a/stock/doctype/purchase_receipt/test_purchase_receipt.py b/stock/doctype/purchase_receipt/test_purchase_receipt.py index 010c29be79f..613dfbc6b00 100644 --- a/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -104,6 +104,7 @@ class TestPurchaseReceipt(unittest.TestCase): pr.doclist[1].received_qty = 1 pr.insert() pr.submit() + self.assertEquals(webnotes.conn.get_value("Serial No", pr.doclist[1].serial_no, "supplier"), pr.doc.supplier) @@ -112,7 +113,7 @@ class TestPurchaseReceipt(unittest.TestCase): def test_serial_no_cancel(self): pr = self.test_serial_no_supplier() pr.cancel() - + self.assertFalse(webnotes.conn.get_value("Serial No", pr.doclist[1].serial_no, "warehouse")) diff --git a/stock/doctype/serial_no/serial_no.py b/stock/doctype/serial_no/serial_no.py index 93836d64e48..61b28417870 100644 --- a/stock/doctype/serial_no/serial_no.py +++ b/stock/doctype/serial_no/serial_no.py @@ -37,11 +37,8 @@ class DocType(StockController): self.validate_warehouse() self.validate_item() - if self.via_stock_ledger: - self.set_status() - self.set_purchase_details() - self.set_sales_details() - + self.on_stock_ledger_entry() + def validate_amc_status(self): """ validate amc status @@ -118,7 +115,7 @@ class DocType(StockController): and ifnull(is_cancelled, 'No')='No' order by name asc limit 1""", ("%%%s%%" % (self.doc.name+"\n"), "%%%s%%" % ("\n"+self.doc.name), self.doc.name, self.doc.item_code), as_dict=1) - + if purchase_sle: self.doc.purchase_document_type = purchase_sle[0].voucher_type self.doc.purchase_document_no = purchase_sle[0].voucher_no @@ -181,6 +178,12 @@ class DocType(StockController): webnotes.conn.sql("""update `tab%s` set serial_no = %s where name=%s""" % (dt[0], '%s', '%s'), ('\n'.join(serial_nos), item[0])) + + def on_stock_ledger_entry(self): + if self.via_stock_ledger and not self.doc.fields.get("__islocal"): + self.set_status() + self.set_purchase_details() + self.set_sales_details() def process_serial_no(sle): item_det = get_item_details(sle.item_code) @@ -233,6 +236,14 @@ def validate_serial_no(sle, item_det): + sle.item_code), SerialNoRequiredError) def update_serial_nos(sle, item_det): + if not sle.serial_no and sle.actual_qty > 0 and item_det.serial_no_series: + from webnotes.model.doc import make_autoname + serial_nos = [] + for i in xrange(cint(sle.actual_qty)): + serial_nos.append(make_autoname(item_det.serial_no_series)) + + webnotes.conn.set(sle, "serial_no", "\n".join(serial_nos)) + if sle.serial_no: serial_nos = get_serial_nos(sle.serial_no) for serial_no in serial_nos: @@ -243,12 +254,6 @@ def update_serial_nos(sle, item_det): sr.save() elif sle.actual_qty > 0: make_serial_no(serial_no, sle) - elif sle.actual_qty > 0 and item_det.serial_no_series: - from webnotes.model.doc import make_autoname - serial_nos = [] - for i in xrange(cint(sle.actual_qty)): - serial_nos.append(make_serial_no(make_autoname(item_det.serial_no_series), sle)) - sle.serial_no = "\n".join(serial_nos) def get_item_details(item_code): return webnotes.conn.sql("""select name, has_batch_no, docstatus, @@ -270,13 +275,16 @@ def make_serial_no(serial_no, sle): webnotes.msgprint(_("Serial No created") + ": " + sr.doc.name) return sr.doc.name -def update_serial_nos_after_submit(controller, parenttype, parentfield): - if not hasattr(webnotes, "new_stock_ledger_entries"): - return +def update_serial_nos_after_submit(controller, parentfield): + stock_ledger_entries = webnotes.conn.sql("""select voucher_detail_no, serial_no + from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", + (controller.doc.doctype, controller.doc.name), as_dict=True) + if not stock_ledger_entries: return + for d in controller.doclist.get({"parentfield": parentfield}): serial_no = None - for sle in webnotes.new_stock_ledger_entries: + for sle in stock_ledger_entries: if sle.voucher_detail_no==d.name: serial_no = sle.serial_no break diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py index 0117864a1be..63cfd2be90f 100644 --- a/stock/doctype/stock_entry/stock_entry.py +++ b/stock/doctype/stock_entry/stock_entry.py @@ -53,7 +53,7 @@ class DocType(StockController): self.update_stock_ledger() from stock.doctype.serial_no.serial_no import update_serial_nos_after_submit - update_serial_nos_after_submit(self, "Stock Entry", "mtn_details") + update_serial_nos_after_submit(self, "mtn_details") self.update_production_order(1) self.make_gl_entries() diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py index b41a6269ad9..f01a83b2f72 100644 --- a/stock/doctype/stock_entry/test_stock_entry.py +++ b/stock/doctype/stock_entry/test_stock_entry.py @@ -44,9 +44,10 @@ class TestStockEntry(unittest.TestCase): def test_warehouse_company_validation(self): self._clear_stock_account_balance() - webnotes.session.user = "test2@example.com" webnotes.bean("Profile", "test2@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") + + webnotes.session.user = "test2@example.com" from stock.utils import InvalidWarehouseCompany st1 = webnotes.bean(copy=test_records[0]) @@ -59,13 +60,13 @@ class TestStockEntry(unittest.TestCase): def test_warehouse_user(self): from stock.utils import UserNotAllowedForWarehouse - webnotes.session.user = "test@example.com" webnotes.bean("Profile", "test@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") webnotes.bean("Profile", "test2@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") - + + webnotes.session.user = "test@example.com" st1 = webnotes.bean(copy=test_records[0]) st1.doc.company = "_Test Company 1" st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1" diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 8fef889f724..c7703ed7ee6 100644 --- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -14,10 +14,6 @@ class DocType(DocListController): def validate(self): from stock.utils import validate_warehouse_user, validate_warehouse_company - if not hasattr(webnotes, "new_stock_ledger_entries"): - webnotes.new_stock_ledger_entries = [] - - webnotes.new_stock_ledger_entries.append(self.doc) self.validate_mandatory() self.validate_item() validate_warehouse_user(self.doc.warehouse) @@ -52,7 +48,7 @@ class DocType(DocListController): %(item_code)s at Warehouse %(warehouse)s \ as on %(posting_date)s %(posting_time)s""" % self.doc.fields) - sself.doc.fields.pop('batch_bal') + self.doc.fields.pop('batch_bal') def validate_mandatory(self): mandatory = ['warehouse','posting_date','voucher_type','voucher_no','actual_qty','company'] diff --git a/stock/utils.py b/stock/utils.py index 1f501644ffa..95b9bffc555 100644 --- a/stock/utils.py +++ b/stock/utils.py @@ -252,10 +252,10 @@ def get_buying_amount(voucher_type, voucher_no, item_row, stock_ledger_entries): def reorder_item(): """ Reorder item if stock reaches reorder level""" - if not hasattr(webnotes, "auto_indent"): - webnotes.auto_indent = cint(webnotes.conn.get_value('Stock Settings', None, 'auto_indent')) + if getattr(webnotes.local, "auto_indent", None) is None: + webnotes.local.auto_indent = cint(webnotes.conn.get_value('Stock Settings', None, 'auto_indent')) - if webnotes.auto_indent: + if webnotes.local.auto_indent: material_requests = {} bin_list = webnotes.conn.sql("""select item_code, warehouse, projected_qty from tabBin where ifnull(item_code, '') != '' and ifnull(warehouse, '') != '' @@ -340,18 +340,18 @@ def create_material_request(material_requests): mr_list.append(mr_bean) except: - if webnotes.message_log: - exceptions_list.append([] + webnotes.message_log) - webnotes.message_log = [] + if webnotes.local.message_log: + exceptions_list.append([] + webnotes.local.message_log) + webnotes.local.message_log = [] else: exceptions_list.append(webnotes.getTraceback()) if mr_list: - if not hasattr(webnotes, "reorder_email_notify"): - webnotes.reorder_email_notify = cint(webnotes.conn.get_value('Stock Settings', None, + if getattr(webnotes.local, "reorder_email_notify", None) is None: + webnotes.local.reorder_email_notify = cint(webnotes.conn.get_value('Stock Settings', None, 'reorder_email_notify')) - if(webnotes.reorder_email_notify): + if(webnotes.local.reorder_email_notify): send_email_notification(mr_list) if exceptions_list: