[price list] added currency property, validates currency, duplication in Item Price
This commit is contained in:
parent
c711598940
commit
3487e0a0f3
@ -1,4 +1,6 @@
|
|||||||
erpnext.updates = [
|
erpnext.updates = [
|
||||||
|
["2nd May", ["Buying: Warehouse must belong to same company as transaction",
|
||||||
|
"Price List": "Added Currency Field. One price list can have only one currency"]],
|
||||||
["18th April", ["Cost Center: Set a default Cost Center for a Company"]],
|
["18th April", ["Cost Center: Set a default Cost Center for a Company"]],
|
||||||
["12th April", ["Employee: List of Leave Approvers who can approve the Employee's Leave Applications"]],
|
["12th April", ["Employee: List of Leave Approvers who can approve the Employee's Leave Applications"]],
|
||||||
["10th April", ["Redesigned File Uploads and added File Manager in Setup"]],
|
["10th April", ["Redesigned File Uploads and added File Manager in Setup"]],
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
"creation": "2013-01-25 11:35:09",
|
"creation": "2013-01-25 11:35:09",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"modified": "2013-01-22 14:56:41",
|
"modified": "2013-05-02 14:44:24",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"owner": "Administrator"
|
"owner": "Administrator"
|
||||||
},
|
},
|
||||||
@ -52,13 +52,21 @@
|
|||||||
"oldfieldtype": "Data",
|
"oldfieldtype": "Data",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"doctype": "DocField",
|
||||||
|
"fieldname": "currency",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Currency",
|
||||||
|
"options": "Currency",
|
||||||
|
"reqd": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"depends_on": "price_list_name",
|
"depends_on": "price_list_name",
|
||||||
"doctype": "DocField",
|
"doctype": "DocField",
|
||||||
"fieldname": "how_to_upload",
|
"fieldname": "how_to_upload",
|
||||||
"fieldtype": "HTML",
|
"fieldtype": "HTML",
|
||||||
"label": "How to upload",
|
"label": "How to upload",
|
||||||
"options": "<div class=\"help\">Use the <a href=\"#data-import-tool\">Data Import Tool</a> to upload, update Item Prices in bulk:\n<ol> \n<li>Go to Data Import Tool.\n<li>Select \"Item\"\n<li>Check on \"With Data\"\n<li>Download \"Item Price\" from Child Tables.\n<li>Update the prices required and add new rows if required.\n<li>Check on \"Overwrite\"\n<li>Upload the modified sheet.\n</div>\n"
|
"options": "<div class=\"well\">Use the <a href=\"#data-import-tool\">Data Import Tool</a> to upload, update Item Prices in bulk:\n<ol> \n<li>Go to Data Import Tool.\n<li>Select \"Item\"\n<li>Check on \"With Data\"\n<li>Download \"Item Price\" from Child Tables.\n<li>Update the prices required and add new rows if required.\n<li>Check on \"Overwrite\"\n<li>Upload the modified sheet.\n</div>\n"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cancel": 0,
|
"cancel": 0,
|
||||||
@ -78,7 +86,6 @@
|
|||||||
"cancel": 1,
|
"cancel": 1,
|
||||||
"create": 1,
|
"create": 1,
|
||||||
"doctype": "DocPerm",
|
"doctype": "DocPerm",
|
||||||
"match": "",
|
|
||||||
"role": "Sales Master Manager",
|
"role": "Sales Master Manager",
|
||||||
"write": 1
|
"write": 1
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
test_records = [
|
test_records = [
|
||||||
[{
|
[{
|
||||||
"doctype": "Price List",
|
"doctype": "Price List",
|
||||||
"price_list_name": "_Test Price List"
|
"price_list_name": "_Test Price List",
|
||||||
|
"currency": "INR"
|
||||||
}]
|
}]
|
||||||
]
|
]
|
@ -14,6 +14,8 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
cur_frm.add_fetch("price_list_name", "currency", "ref_currency")
|
||||||
|
|
||||||
cur_frm.cscript.refresh = function(doc) {
|
cur_frm.cscript.refresh = function(doc) {
|
||||||
// make sensitive fields(has_serial_no, is_stock_item, valuation_method)
|
// make sensitive fields(has_serial_no, is_stock_item, valuation_method)
|
||||||
// read only if any stock ledger entry exists
|
// read only if any stock ledger entry exists
|
||||||
|
@ -24,6 +24,8 @@ from webnotes import msgprint, _
|
|||||||
|
|
||||||
from webnotes.model.controller import DocListController
|
from webnotes.model.controller import DocListController
|
||||||
|
|
||||||
|
class PriceListCurrencyMismatch(Exception): pass
|
||||||
|
|
||||||
class DocType(DocListController):
|
class DocType(DocListController):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
if not self.doc.stock_uom:
|
if not self.doc.stock_uom:
|
||||||
@ -34,7 +36,7 @@ class DocType(DocListController):
|
|||||||
self.add_default_uom_in_conversion_factor_table()
|
self.add_default_uom_in_conversion_factor_table()
|
||||||
self.valiadte_item_type()
|
self.valiadte_item_type()
|
||||||
self.check_for_active_boms()
|
self.check_for_active_boms()
|
||||||
self.check_ref_rate_detail()
|
self.validate_price_lists()
|
||||||
self.fill_customer_code()
|
self.fill_customer_code()
|
||||||
self.check_item_tax()
|
self.check_item_tax()
|
||||||
self.validate_barcode()
|
self.validate_barcode()
|
||||||
@ -122,14 +124,20 @@ class DocType(DocListController):
|
|||||||
if cstr(self.doc.fields.get(d)) != 'Yes':
|
if cstr(self.doc.fields.get(d)) != 'Yes':
|
||||||
_check_for_active_boms(fl[d])
|
_check_for_active_boms(fl[d])
|
||||||
|
|
||||||
def check_ref_rate_detail(self):
|
def validate_price_lists(self):
|
||||||
check_list=[]
|
price_lists=[]
|
||||||
for d in getlist(self.doclist,'ref_rate_details'):
|
for d in getlist(self.doclist,'ref_rate_details'):
|
||||||
if d.price_list_name in check_list:
|
if d.price_list_name in price_lists:
|
||||||
msgprint(_("Cannot have two prices for same Price List") + ": " + d.price_list_name,
|
msgprint(_("Cannot have two prices for same Price List") + ": " + d.price_list_name,
|
||||||
raise_exception= webnotes.DuplicateEntryError)
|
raise_exception= webnotes.DuplicateEntryError)
|
||||||
else:
|
else:
|
||||||
check_list.append(d.price_list_name)
|
price_list_currency = webnotes.conn.get_value("Price List", d.price_list_name, "currency")
|
||||||
|
if price_list_currency and d.ref_currency != price_list_currency:
|
||||||
|
msgprint(_("Currency does not match Price List Currency for Price List") \
|
||||||
|
+ ": " + d.price_list_name, raise_exception=PriceListCurrencyMismatch)
|
||||||
|
|
||||||
|
price_lists.append(d.price_list_name)
|
||||||
|
|
||||||
|
|
||||||
def fill_customer_code(self):
|
def fill_customer_code(self):
|
||||||
""" Append all the customer codes and insert into "customer_code" field of item table """
|
""" Append all the customer codes and insert into "customer_code" field of item table """
|
||||||
|
@ -28,6 +28,14 @@ class TestItem(unittest.TestCase):
|
|||||||
item.doclist.append(webnotes.doc(item_price.fields.copy()))
|
item.doclist.append(webnotes.doc(item_price.fields.copy()))
|
||||||
self.assertRaises(webnotes.DuplicateEntryError, item.insert)
|
self.assertRaises(webnotes.DuplicateEntryError, item.insert)
|
||||||
|
|
||||||
|
def test_price_list_mismatch(self):
|
||||||
|
from stock.doctype.item.item import PriceListCurrencyMismatch
|
||||||
|
item = webnotes.bean(copy=test_records[0])
|
||||||
|
item.doc.item_code = "_Test Item 11"
|
||||||
|
item_price = item.doclist.get({"doctype": "Item Price"})[0].ref_currency="USD"
|
||||||
|
self.assertRaises(PriceListCurrencyMismatch, item.insert)
|
||||||
|
|
||||||
|
|
||||||
test_records = [
|
test_records = [
|
||||||
[{
|
[{
|
||||||
"doctype": "Item",
|
"doctype": "Item",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user