Merge branch 'master' of github.com:webnotes/erpnext into cleanup
This commit is contained in:
commit
bed14d7fa4
@ -6,7 +6,6 @@ test_records = [
|
|||||||
"doctype": "POS Setting",
|
"doctype": "POS Setting",
|
||||||
"name": "_Test POS Setting",
|
"name": "_Test POS Setting",
|
||||||
"currency": "INR",
|
"currency": "INR",
|
||||||
"conversion_rate": 1.0,
|
|
||||||
"selling_price_list": "_Test Price List",
|
"selling_price_list": "_Test Price List",
|
||||||
"company": "_Test Company",
|
"company": "_Test Company",
|
||||||
"warehouse": "_Test Warehouse - _TC",
|
"warehouse": "_Test Warehouse - _TC",
|
||||||
|
@ -338,11 +338,14 @@ class DocType(BuyingController):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# accumulate valuation tax
|
# accumulate valuation tax
|
||||||
if tax.category in ("Valuation", "Valuation and Total") and flt(tax.tax_amount) \
|
if tax.category in ("Valuation", "Valuation and Total") and flt(tax.tax_amount):
|
||||||
and tax.cost_center:
|
if auto_accounting_for_stock and not tax.cost_center:
|
||||||
valuation_tax.setdefault(tax.cost_center, 0)
|
webnotes.throw(_("Row %(row)s: Cost Center is mandatory \
|
||||||
valuation_tax[tax.cost_center] += \
|
if tax/charges category is Valuation or Valuation and Total" %
|
||||||
(tax.add_deduct_tax == "Add" and 1 or -1) * flt(tax.tax_amount)
|
{"row": tax.idx}))
|
||||||
|
valuation_tax.setdefault(tax.cost_center, 0)
|
||||||
|
valuation_tax[tax.cost_center] += \
|
||||||
|
(tax.add_deduct_tax == "Add" and 1 or -1) * flt(tax.tax_amount)
|
||||||
|
|
||||||
# item gl entries
|
# item gl entries
|
||||||
stock_item_and_auto_accounting_for_stock = False
|
stock_item_and_auto_accounting_for_stock = False
|
||||||
|
@ -100,7 +100,7 @@ class DocType:
|
|||||||
except webnotes.DuplicateEntryError, e:
|
except webnotes.DuplicateEntryError, e:
|
||||||
# already exists
|
# already exists
|
||||||
pass
|
pass
|
||||||
|
profile_wrapper.ignore_permissions = True
|
||||||
profile_wrapper.save()
|
profile_wrapper.save()
|
||||||
|
|
||||||
def validate_date(self):
|
def validate_date(self):
|
||||||
|
@ -19,6 +19,7 @@ requirements = [
|
|||||||
"requests",
|
"requests",
|
||||||
"chardet",
|
"chardet",
|
||||||
"dropbox",
|
"dropbox",
|
||||||
|
"Werkzeug",
|
||||||
"google-api-python-client ",
|
"google-api-python-client ",
|
||||||
"pygeoip"
|
"pygeoip"
|
||||||
]
|
]
|
||||||
@ -113,12 +114,6 @@ def install_using_yum():
|
|||||||
def update_config_for_redhat():
|
def update_config_for_redhat():
|
||||||
import re
|
import re
|
||||||
|
|
||||||
# update memcache user
|
|
||||||
with open("/etc/sysconfig/memcached", "r") as original:
|
|
||||||
memcached_conf = original.read()
|
|
||||||
with open("/etc/sysconfig/memcached", "w") as modified:
|
|
||||||
modified.write(re.sub('USER.*', 'USER="%s"' % apache_user, memcached_conf))
|
|
||||||
|
|
||||||
# set to autostart on startup
|
# set to autostart on startup
|
||||||
for service in ("mysqld", "httpd", "memcached", "ntpd"):
|
for service in ("mysqld", "httpd", "memcached", "ntpd"):
|
||||||
exec_in_shell("chkconfig --level 2345 %s on" % service)
|
exec_in_shell("chkconfig --level 2345 %s on" % service)
|
||||||
@ -132,6 +127,11 @@ def install_using_apt():
|
|||||||
print packages
|
print packages
|
||||||
print "-"*80
|
print "-"*80
|
||||||
exec_in_shell("apt-get install -y %s" % packages)
|
exec_in_shell("apt-get install -y %s" % packages)
|
||||||
|
global root_password
|
||||||
|
if not root_password:
|
||||||
|
root_password = get_root_password()
|
||||||
|
exec_in_shell("echo mysql-server mysql-server/root_password password %s | sudo debconf-set-selections" % root_password)
|
||||||
|
exec_in_shell("echo mysql-server mysql-server/root_password_again password %s | sudo debconf-set-selections" % root_password)
|
||||||
|
|
||||||
if not exec_in_shell("which mysql"):
|
if not exec_in_shell("which mysql"):
|
||||||
packages = "mysql-server libmysqlclient-dev"
|
packages = "mysql-server libmysqlclient-dev"
|
||||||
@ -141,20 +141,12 @@ def install_using_apt():
|
|||||||
update_config_for_debian()
|
update_config_for_debian()
|
||||||
|
|
||||||
def update_config_for_debian():
|
def update_config_for_debian():
|
||||||
|
for service in ("mysql", "ntpd"):
|
||||||
# update memcache user
|
|
||||||
with open("/etc/memcached.conf", "r") as original:
|
|
||||||
memcached_conf = original.read()
|
|
||||||
with open("/etc/memcached.conf", "w") as modified:
|
|
||||||
modified.write(memcached_conf.replace("-u memcache", "-u %s" % apache_user))
|
|
||||||
|
|
||||||
for service in ("mysql", "memcached", "ntpd"):
|
|
||||||
exec_in_shell("service %s restart" % service)
|
exec_in_shell("service %s restart" % service)
|
||||||
|
|
||||||
def install_python_modules():
|
def install_python_modules():
|
||||||
print "-"*80
|
print "-"*80
|
||||||
print "Installing Python Modules: (This may take some time)"
|
print "Installing Python Modules: (This may take some time)"
|
||||||
print python_modules
|
|
||||||
print "-"*80
|
print "-"*80
|
||||||
|
|
||||||
if not exec_in_shell("which pip"):
|
if not exec_in_shell("which pip"):
|
||||||
@ -163,7 +155,7 @@ def install_python_modules():
|
|||||||
exec_in_shell("pip install --upgrade pip")
|
exec_in_shell("pip install --upgrade pip")
|
||||||
exec_in_shell("pip install --upgrade setuptools")
|
exec_in_shell("pip install --upgrade setuptools")
|
||||||
exec_in_shell("pip install --upgrade virtualenv")
|
exec_in_shell("pip install --upgrade virtualenv")
|
||||||
exec_in_shell("pip install -r {}".format(' '.join(requirements)))
|
exec_in_shell("pip install {}".format(' '.join(requirements)))
|
||||||
|
|
||||||
def install_erpnext(install_path):
|
def install_erpnext(install_path):
|
||||||
print
|
print
|
||||||
@ -208,7 +200,7 @@ def setup_folders(install_path):
|
|||||||
app = os.path.join(install_path, "app")
|
app = os.path.join(install_path, "app")
|
||||||
if not os.path.exists(app):
|
if not os.path.exists(app):
|
||||||
print "Cloning erpnext"
|
print "Cloning erpnext"
|
||||||
exec_in_shell("cd %s && git clone https://github.com/webnotes/erpnext.git app && cd app && git checkout wsgi" % install_path)
|
exec_in_shell("cd %s && git clone https://github.com/webnotes/erpnext.git app" % install_path)
|
||||||
exec_in_shell("cd app && git config core.filemode false")
|
exec_in_shell("cd app && git config core.filemode false")
|
||||||
if not os.path.exists(app):
|
if not os.path.exists(app):
|
||||||
raise Exception, "Couldn't clone erpnext repository"
|
raise Exception, "Couldn't clone erpnext repository"
|
||||||
@ -216,7 +208,7 @@ def setup_folders(install_path):
|
|||||||
lib = os.path.join(install_path, "lib")
|
lib = os.path.join(install_path, "lib")
|
||||||
if not os.path.exists(lib):
|
if not os.path.exists(lib):
|
||||||
print "Cloning wnframework"
|
print "Cloning wnframework"
|
||||||
exec_in_shell("cd %s && git clone https://github.com/webnotes/wnframework.git lib && cd lib && git checkout wsgi" % install_path)
|
exec_in_shell("cd %s && git clone https://github.com/webnotes/wnframework.git lib" % install_path)
|
||||||
exec_in_shell("cd lib && git config core.filemode false")
|
exec_in_shell("cd lib && git config core.filemode false")
|
||||||
if not os.path.exists(lib):
|
if not os.path.exists(lib):
|
||||||
raise Exception, "Couldn't clone wnframework repository"
|
raise Exception, "Couldn't clone wnframework repository"
|
||||||
|
@ -409,7 +409,8 @@ def get_bom_items_as_dict(bom, qty=1, fetch_exploded=1):
|
|||||||
item_dict = {}
|
item_dict = {}
|
||||||
|
|
||||||
query = """select
|
query = """select
|
||||||
bom_item.item_code,
|
bom_item.item_code,
|
||||||
|
item.item_name,
|
||||||
ifnull(sum(bom_item.qty_consumed_per_unit),0) * %(qty)s as qty,
|
ifnull(sum(bom_item.qty_consumed_per_unit),0) * %(qty)s as qty,
|
||||||
item.description,
|
item.description,
|
||||||
item.stock_uom,
|
item.stock_uom,
|
||||||
|
@ -133,16 +133,16 @@ class DocType:
|
|||||||
|
|
||||||
@webnotes.whitelist()
|
@webnotes.whitelist()
|
||||||
def get_item_details(item):
|
def get_item_details(item):
|
||||||
res = webnotes.conn.sql("""select stock_uom
|
res = webnotes.conn.sql("""select stock_uom, description
|
||||||
from `tabItem` where (ifnull(end_of_life, "")="" or end_of_life > now())
|
from `tabItem` where (ifnull(end_of_life, "")="" or end_of_life > now())
|
||||||
and name=%s""", (item,), as_dict=1)
|
and name=%s""", item, as_dict=1)
|
||||||
|
|
||||||
if not res:
|
if not res:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
res = res[0]
|
res = res[0]
|
||||||
bom = webnotes.conn.sql("""select name from `tabBOM` where item=%s
|
bom = webnotes.conn.sql("""select name from `tabBOM` where item=%s
|
||||||
and ifnull(is_default, 0)=1""", (item,))
|
and ifnull(is_default, 0)=1""", item)
|
||||||
if bom:
|
if bom:
|
||||||
res.bom_no = bom[0][0]
|
res.bom_no = bom[0][0]
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ erpnext.AccountTreeGrid = wn.views.TreeGridReport.extend({
|
|||||||
var me= this;
|
var me= this;
|
||||||
$.each(this.data, function(i, account) {
|
$.each(this.data, function(i, account) {
|
||||||
// update groups
|
// update groups
|
||||||
if(account.rgt - account.lft == 1) {
|
if((account.group_or_ledger == "Ledger") || (account.rgt - account.lft == 1)) {
|
||||||
var parent = me.parent_map[account.name];
|
var parent = me.parent_map[account.name];
|
||||||
while(parent) {
|
while(parent) {
|
||||||
var parent_account = me.item_by_name[parent];
|
var parent_account = me.item_by_name[parent];
|
||||||
|
@ -13,23 +13,18 @@ class DocType:
|
|||||||
def __init__(self, d, dl):
|
def __init__(self, d, dl):
|
||||||
self.doc, self.doclist = d, dl
|
self.doc, self.doclist = d, dl
|
||||||
|
|
||||||
def on_update(self):
|
def validate(self):
|
||||||
|
self.check_duplicate_item()
|
||||||
self.update_price_list_details()
|
self.update_price_list_details()
|
||||||
self.update_item_details()
|
self.update_item_details()
|
||||||
self.check_duplicate_item()
|
|
||||||
|
|
||||||
def update_price_list_details(self):
|
def update_price_list_details(self):
|
||||||
self.doc.buying_or_selling = webnotes.conn.get_value("Price List", self.doc.price_list,
|
self.doc.buying_or_selling, self.doc.currency = webnotes.conn.get_value("Price List",
|
||||||
"buying_or_selling")
|
self.doc.price_list, ["buying_or_selling", "currency"])
|
||||||
|
|
||||||
self.doc.currency = webnotes.conn.get_value("Price List", self.doc.price_list,
|
|
||||||
"currency")
|
|
||||||
|
|
||||||
def update_item_details(self):
|
def update_item_details(self):
|
||||||
self.doc.item_name = webnotes.conn.get_value("Item", self.doc.item_code, "item_name")
|
self.doc.item_name, self.doc.item_description = webnotes.conn.get_value("Item",
|
||||||
|
self.doc.item_code, ["item_name", "description"])
|
||||||
self.doc.item_description = webnotes.conn.get_value("Item", self.doc.item_code,
|
|
||||||
"description")
|
|
||||||
|
|
||||||
def check_duplicate_item(self):
|
def check_duplicate_item(self):
|
||||||
if webnotes.conn.sql("""select name from `tabItem Price`
|
if webnotes.conn.sql("""select name from `tabItem Price`
|
||||||
|
@ -451,35 +451,44 @@ class DocType(StockController):
|
|||||||
item["to_warehouse"] = ""
|
item["to_warehouse"] = ""
|
||||||
|
|
||||||
# add raw materials to Stock Entry Detail table
|
# add raw materials to Stock Entry Detail table
|
||||||
self.add_to_stock_entry_detail(item_dict)
|
idx = self.add_to_stock_entry_detail(item_dict)
|
||||||
|
|
||||||
# add finished good item to Stock Entry Detail table -- along with bom_no
|
# add finished good item to Stock Entry Detail table -- along with bom_no
|
||||||
if self.doc.production_order and self.doc.purpose == "Manufacture/Repack":
|
if self.doc.production_order and self.doc.purpose == "Manufacture/Repack":
|
||||||
|
item = webnotes.conn.get_value("Item", pro_obj.doc.production_item, ["item_name",
|
||||||
|
"description", "stock_uom", "purchase_account", "cost_center"], as_dict=1)
|
||||||
self.add_to_stock_entry_detail({
|
self.add_to_stock_entry_detail({
|
||||||
cstr(pro_obj.doc.production_item): {
|
cstr(pro_obj.doc.production_item): {
|
||||||
"to_warehouse": pro_obj.doc.fg_warehouse,
|
"to_warehouse": pro_obj.doc.fg_warehouse,
|
||||||
"from_warehouse": "",
|
"from_warehouse": "",
|
||||||
"qty": self.doc.fg_completed_qty,
|
"qty": self.doc.fg_completed_qty,
|
||||||
"description": pro_obj.doc.description,
|
"item_name": item.item_name,
|
||||||
"stock_uom": pro_obj.doc.stock_uom
|
"description": item.description,
|
||||||
|
"stock_uom": item.stock_uom,
|
||||||
|
"expense_account": item.purchase_account,
|
||||||
|
"cost_center": item.cost_center,
|
||||||
}
|
}
|
||||||
}, bom_no=pro_obj.doc.bom_no)
|
}, bom_no=pro_obj.doc.bom_no, idx=idx)
|
||||||
|
|
||||||
elif self.doc.purpose in ["Material Receipt", "Manufacture/Repack"]:
|
elif self.doc.purpose in ["Material Receipt", "Manufacture/Repack"]:
|
||||||
if self.doc.purpose=="Material Receipt":
|
if self.doc.purpose=="Material Receipt":
|
||||||
self.doc.from_warehouse = ""
|
self.doc.from_warehouse = ""
|
||||||
|
|
||||||
item = webnotes.conn.sql("""select name, item_name, description, uom
|
item = webnotes.conn.sql("""select name, item_name, description,
|
||||||
from `tabItem` where name=%s""", (self.doc.bom_no), as_dict=1)
|
uom, purchase_account, cost_center from `tabItem`
|
||||||
|
where name=(select item from tabBOM where name=%s)""",
|
||||||
|
self.doc.bom_no, as_dict=1)
|
||||||
self.add_to_stock_entry_detail({
|
self.add_to_stock_entry_detail({
|
||||||
item[0]["item"] : {
|
item[0]["item"] : {
|
||||||
"qty": self.doc.fg_completed_qty,
|
"qty": self.doc.fg_completed_qty,
|
||||||
"item_name": item[0].item_name,
|
"item_name": item[0].item_name,
|
||||||
"description": item[0]["description"],
|
"description": item[0]["description"],
|
||||||
"stock_uom": item[0]["uom"],
|
"stock_uom": item[0]["uom"],
|
||||||
"from_warehouse": ""
|
"from_warehouse": "",
|
||||||
|
"expense_account": item[0].purchase_account,
|
||||||
|
"cost_center": item[0].cost_center,
|
||||||
}
|
}
|
||||||
}, bom_no=self.doc.bom_no)
|
}, bom_no=self.doc.bom_no, idx=idx)
|
||||||
|
|
||||||
self.get_stock_and_rate()
|
self.get_stock_and_rate()
|
||||||
|
|
||||||
@ -543,8 +552,8 @@ class DocType(StockController):
|
|||||||
|
|
||||||
return issued_item_qty
|
return issued_item_qty
|
||||||
|
|
||||||
def add_to_stock_entry_detail(self, item_dict, bom_no=None):
|
def add_to_stock_entry_detail(self, item_dict, bom_no=None, idx=None):
|
||||||
idx = 1
|
if not idx: idx = 1
|
||||||
expense_account, cost_center = webnotes.conn.get_values("Company", self.doc.company, \
|
expense_account, cost_center = webnotes.conn.get_values("Company", self.doc.company, \
|
||||||
["default_expense_account", "cost_center"])[0]
|
["default_expense_account", "cost_center"])[0]
|
||||||
|
|
||||||
@ -572,6 +581,7 @@ class DocType(StockController):
|
|||||||
|
|
||||||
# increment idx by 1
|
# increment idx by 1
|
||||||
idx += 1
|
idx += 1
|
||||||
|
return idx
|
||||||
|
|
||||||
def get_cust_values(self):
|
def get_cust_values(self):
|
||||||
"""fetches customer details"""
|
"""fetches customer details"""
|
||||||
|
49
utilities/demo/demo_docs/Item_Price.csv
Normal file
49
utilities/demo/demo_docs/Item_Price.csv
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
Data Import Template,,,,,,,
|
||||||
|
Table:,Item Price,,,,,,
|
||||||
|
,,,,,,,
|
||||||
|
,,,,,,,
|
||||||
|
Notes:,,,,,,,
|
||||||
|
Please do not change the template headings.,,,,,,,
|
||||||
|
First data column must be blank.,,,,,,,
|
||||||
|
"If you are uploading new records, leave the ""name"""" (ID) column blank.""",,,,,,,
|
||||||
|
"If you are uploading new records, ""Naming Series"""" becomes mandatory"," if present.""",,,,,,
|
||||||
|
Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish.,,,,,,,
|
||||||
|
"For updating, you can update only selective columns.",,,,,,,
|
||||||
|
You can only upload upto 5000 records in one go. (may be less in some cases),,,,,,,
|
||||||
|
,,,,,,,
|
||||||
|
DocType:,Item Price,,,,,,
|
||||||
|
Column Labels:,ID,Price List,Item Code,Rate,Valid for Buying or Selling?,Item Name,Item Description
|
||||||
|
Column Name:,name,price_list,item_code,ref_rate,buying_or_selling,item_name,item_description
|
||||||
|
Mandatory:,Yes,Yes,Yes,Yes,No,No,No
|
||||||
|
Type:,Data (text),Link,Link,Currency,Select,Data,Text
|
||||||
|
Info:,,Valid Price List,Valid Item,,"One of: Selling, Buying",,
|
||||||
|
Start entering data below this line,,,,,,,
|
||||||
|
,,Standard Buying,Base Bearing Plate,15,Buying,,
|
||||||
|
,,Standard Buying,Base Plate,20,Buying,,
|
||||||
|
,,Standard Buying,Bearing Block,10,Buying,,
|
||||||
|
,,Standard Buying,Bearing Collar,20,Buying,,
|
||||||
|
,,Standard Buying,Bearing Pipe,15,Buying,,
|
||||||
|
,,Standard Buying,Blade Rib,10,Buying,,
|
||||||
|
,,Standard Buying,Disc Collars,74,Buying,,
|
||||||
|
,,Standard Buying,External Disc,45,Buying,,
|
||||||
|
,,Standard Buying,Internal Disc,33,Buying,,
|
||||||
|
,,Standard Buying,Shaft,30,Buying,,
|
||||||
|
,,Standard Buying,Stand,40,Buying,,
|
||||||
|
,,Standard Buying,Upper Bearing Plate,50,Buying,,
|
||||||
|
,,Standard Buying,Wing Sheet,22,Buying,,
|
||||||
|
,,Standard Selling,Wind Turbine,21,Selling,,
|
||||||
|
,,Standard Selling,Wind Mill A Series,28,Selling,,
|
||||||
|
,,Standard Selling,Wind MIll C Series,14,Selling,,
|
||||||
|
,,Standard Selling,Base Bearing Plate,28,Selling,,
|
||||||
|
,,Standard Selling,Base Plate,21,Selling,,
|
||||||
|
,,Standard Selling,Bearing Block,14,Selling,,
|
||||||
|
,,Standard Selling,Bearing Collar,103.6,Selling,,
|
||||||
|
,,Standard Selling,Bearing Pipe,63,Selling,,
|
||||||
|
,,Standard Selling,Blade Rib,46.2,Selling,,
|
||||||
|
,,Standard Selling,Disc Collars,42,Selling,,
|
||||||
|
,,Standard Selling,External Disc,56,Selling,,
|
||||||
|
,,Standard Selling,Internal Disc,70,Selling,,
|
||||||
|
,,Standard Selling,Shaft,340,Selling,,
|
||||||
|
,,Standard Selling,Stand,400,Selling,,
|
||||||
|
,,Standard Selling,Upper Bearing Plate,300,Selling,,
|
||||||
|
,,Standard Selling,Wing Sheet,30.8,Selling,,
|
|
@ -1,49 +0,0 @@
|
|||||||
Data Import Template,,,,,,,,,,,
|
|
||||||
Table:,Price List,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,
|
|
||||||
Notes:,,,,,,,,,,,
|
|
||||||
Please do not change the template headings.,,,,,,,,,,,
|
|
||||||
First data column must be blank.,,,,,,,,,,,
|
|
||||||
"If you are uploading new records, leave the ""name"" (ID) column blank.",,,,,,,,,,,
|
|
||||||
"If you are uploading new records, ""Naming Series"" becomes mandatory, if present.",,,,,,,,,,,
|
|
||||||
Only mandatory fields are necessary for new records. You can delete non-mandatory columns if you wish.,,,,,,,,,,,
|
|
||||||
"For updating, you can update only selective columns.",,,,,,,,,,,
|
|
||||||
You can only upload upto 5000 records in one go. (may be less in some cases),,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,
|
|
||||||
DocType:,Price List,,,,~,For Territory,valid_for_territories,~,Item Price,item_prices,
|
|
||||||
Column Labels:,ID,Price List Name,Currency,Valid for Buying or Selling?,,ID,Territory,,ID,Item Code,Rate
|
|
||||||
Column Name:,name,price_list_name,currency,buying_or_selling,~,name,territory,~,name,item_code,ref_rate
|
|
||||||
Mandatory:,Yes,Yes,Yes,Yes,,Yes,Yes,,Yes,Yes,Yes
|
|
||||||
Type:,Data (text),Data,Link,Select,,Data,Link,,Data,Link,Currency
|
|
||||||
Info:,,,Valid Currency,"One of: Buying, Selling",,Leave blank for new records,Valid Territory,,Leave blank for new records,Valid Item,
|
|
||||||
Start entering data below this line,,,,,,,,,,,
|
|
||||||
,Standard Buying,Standard Buying,USD,Buying,,,United States,,,Base Bearing Plate,15
|
|
||||||
,,,,,,,,,,Base Plate,20
|
|
||||||
,,,,,,,,,,Bearing Block,10
|
|
||||||
,,,,,,,,,,Bearing Collar,20
|
|
||||||
,,,,,,,,,,Bearing Pipe,15
|
|
||||||
,,,,,,,,,,Blade Rib,10
|
|
||||||
,,,,,,,,,,Disc Collars,74
|
|
||||||
,,,,,,,,,,External Disc,45
|
|
||||||
,,,,,,,,,,Internal Disc,33
|
|
||||||
,,,,,,,,,,Shaft,30
|
|
||||||
,,,,,,,,,,Stand,40
|
|
||||||
,,,,,,,,,,Upper Bearing Plate,50
|
|
||||||
,,,,,,,,,,Wing Sheet,22
|
|
||||||
,Standard Selling,Standard Selling,USD,Selling,,,United States,,,Wind Turbine,21
|
|
||||||
,,,,,,,,,,Wind Mill A Series,28
|
|
||||||
,,,,,,,,,,Wind MIll C Series,14
|
|
||||||
,,,,,,,,,,Base Bearing Plate,28
|
|
||||||
,,,,,,,,,,Base Plate,21
|
|
||||||
,,,,,,,,,,Bearing Block,14
|
|
||||||
,,,,,,,,,,Bearing Collar,103.6
|
|
||||||
,,,,,,,,,,Bearing Pipe,63
|
|
||||||
,,,,,,,,,,Blade Rib,46.2
|
|
||||||
,,,,,,,,,,Disc Collars,42
|
|
||||||
,,,,,,,,,,External Disc,56
|
|
||||||
,,,,,,,,,,Internal Disc,70
|
|
||||||
,,,,,,,,,,Shaft,340
|
|
||||||
,,,,,,,,,,Stand,400
|
|
||||||
,,,,,,,,,,Upper Bearing Plate,300
|
|
||||||
,,,,,,,,,,Wing Sheet,30.8
|
|
|
@ -396,7 +396,7 @@ def make_items():
|
|||||||
import_data("BOM", submit=True)
|
import_data("BOM", submit=True)
|
||||||
|
|
||||||
def make_price_lists():
|
def make_price_lists():
|
||||||
import_data("Price_List", overwrite=True)
|
import_data("Item_Price", overwrite=True)
|
||||||
|
|
||||||
def make_customers_suppliers_contacts():
|
def make_customers_suppliers_contacts():
|
||||||
import_data(["Customer", "Supplier", "Contact", "Address", "Lead"])
|
import_data(["Customer", "Supplier", "Contact", "Address", "Lead"])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user