Merge branch 'master' of github.com:webnotes/erpnext

This commit is contained in:
Rushabh Mehta
2012-12-25 15:09:58 +05:30
38 changed files with 470 additions and 431 deletions

View File

@@ -42,7 +42,7 @@ class DocType:
self.doc.total_amount = 0.0 self.doc.total_amount = 0.0
for d in dl: for d in dl:
nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', 1, self.doclist) nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', self.doclist)
nl.posting_date = cstr(d[5]) nl.posting_date = cstr(d[5])
nl.voucher_id = cstr(d[0]) nl.voucher_id = cstr(d[0])
nl.cheque_number = cstr(d[1]) nl.cheque_number = cstr(d[1])

View File

@@ -31,7 +31,8 @@ class DocType:
'October','November','December'] 'October','November','December']
idx =1 idx =1
for m in month_list: for m in month_list:
mnth = addchild(self.doc,'budget_distribution_details','Budget Distribution Detail',1,self.doclist) mnth = addchild(self.doc, 'budget_distribution_details',
'Budget Distribution Detail', self.doclist)
mnth.month = m or '' mnth.month = m or ''
mnth.idx = idx mnth.idx = idx
idx += 1 idx += 1

View File

@@ -223,7 +223,7 @@ class DocType:
obj.doclist = obj.doc.clear_table(obj.doclist,table_field_name) obj.doclist = obj.doc.clear_table(obj.doclist,table_field_name)
# Create advance table # Create advance table
for d in jv_detail: for d in jv_detail:
add = addchild(obj.doc, table_field_name, table_name, 1, obj.doclist) add = addchild(obj.doc, table_field_name, table_name, obj.doclist)
add.journal_voucher = d[0] add.journal_voucher = d[0]
add.jv_detail_no = d[3] add.jv_detail_no = d[3]
add.remarks = d[1] add.remarks = d[1]
@@ -286,7 +286,7 @@ class DocType:
webnotes.conn.sql("update `tabJournal Voucher Detail` set %s = '%s', %s = '%s' where name = '%s'" % (dr_or_cr, flt(allocate), doctype == "Purchase Invoice" and 'against_voucher' or 'against_invoice',cstr(against_document_no), jv_detail_no)) webnotes.conn.sql("update `tabJournal Voucher Detail` set %s = '%s', %s = '%s' where name = '%s'" % (dr_or_cr, flt(allocate), doctype == "Purchase Invoice" and 'against_voucher' or 'against_invoice',cstr(against_document_no), jv_detail_no))
# new entry with balance amount # new entry with balance amount
add = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', 1, jv_obj.doclist) add = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', jv_obj.doclist)
add.account = account_head add.account = account_head
add.cost_center = cstr(jvd[0][1]) add.cost_center = cstr(jvd[0][1])
add.balance = cstr(jvd[0][2]) add.balance = cstr(jvd[0][2])
@@ -353,7 +353,7 @@ class DocType:
if d['allocated_amt'] < d['unadjusted_amt']: if d['allocated_amt'] < d['unadjusted_amt']:
jvd = webnotes.conn.sql("select cost_center, balance, against_account, is_advance from `tabJournal Voucher Detail` where name = '%s'" % d['voucher_detail_no']) jvd = webnotes.conn.sql("select cost_center, balance, against_account, is_advance from `tabJournal Voucher Detail` where name = '%s'" % d['voucher_detail_no'])
# new entry with balance amount # new entry with balance amount
ch = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail', 1) ch = addchild(jv_obj.doc, 'entries', 'Journal Voucher Detail')
ch.account = d['account'] ch.account = d['account']
ch.cost_center = cstr(jvd[0][0]) ch.cost_center = cstr(jvd[0][0])
ch.balance = cstr(jvd[0][1]) ch.balance = cstr(jvd[0][1])

View File

@@ -174,7 +174,7 @@ class DocType:
# Set the diff in a new row # Set the diff in a new row
if flag == 0 and (flt(diff) != 0): if flag == 0 and (flt(diff) != 0):
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', 1, self.doclist) jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
if diff>0: if diff>0:
jd.credit = flt(diff) jd.credit = flt(diff)
elif diff<0: elif diff<0:
@@ -256,7 +256,7 @@ class DocType:
total = 0 total = 0
for d in self.get_values(): for d in self.get_values():
total += flt(d[2]) total += flt(d[2])
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', 1, self.doclist) jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
jd.account = cstr(d[1]) jd.account = cstr(d[1])
if self.doc.write_off_based_on == 'Accounts Receivable': if self.doc.write_off_based_on == 'Accounts Receivable':
jd.credit = flt(d[2]) jd.credit = flt(d[2])
@@ -265,7 +265,7 @@ class DocType:
jd.debit = flt(d[2]) jd.debit = flt(d[2])
jd.against_voucher = cstr(d[0]) jd.against_voucher = cstr(d[0])
jd.save(1) jd.save(1)
jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', 1, self.doclist) jd = addchild(self.doc, 'entries', 'Journal Voucher Detail', self.doclist)
if self.doc.write_off_based_on == 'Accounts Receivable': if self.doc.write_off_based_on == 'Accounts Receivable':
jd.debit = total jd.debit = total
elif self.doc.write_off_based_on == 'Accounts Payable': elif self.doc.write_off_based_on == 'Accounts Payable':

View File

@@ -100,7 +100,7 @@ class DocType:
#-------------------------------------------------- #--------------------------------------------------
def create_payment_table(self, gle): def create_payment_table(self, gle):
for d in gle: for d in gle:
ch = addchild(self.doc, 'ir_payment_details', 'Payment to Invoice Matching Tool Detail', 1, self.doclist) ch = addchild(self.doc, 'ir_payment_details', 'Payment to Invoice Matching Tool Detail', self.doclist)
ch.voucher_no = d.get('voucher_no') ch.voucher_no = d.get('voucher_no')
ch.posting_date = d.get('posting_date') ch.posting_date = d.get('posting_date')
ch.amt_due = self.acc_type == 'debit' and flt(d.get('amt_due')) or -1*flt(d.get('amt_due')) ch.amt_due = self.acc_type == 'debit' and flt(d.get('amt_due')) or -1*flt(d.get('amt_due'))

View File

@@ -612,7 +612,8 @@ class DocType(TransactionBase):
idx = 0 idx = 0
for other in other_charge: for other in other_charge:
d = addchild(obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges', 1, obj.doclist) d = addchild(obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges',
obj.doclist)
d.category = other['category'] d.category = other['category']
d.add_deduct_tax = other['add_deduct_tax'] d.add_deduct_tax = other['add_deduct_tax']
d.charge_type = other['charge_type'] d.charge_type = other['charge_type']

View File

@@ -314,7 +314,7 @@ class DocType(TransactionBase):
for i in bom_det: for i in bom_det:
if i and not sql("select name from `tabPurchase Order Item Supplied` where reference_name = '%s' and bom_detail_no = '%s' and parent = '%s' " %(d.name, i[6], self.doc.name)): if i and not sql("select name from `tabPurchase Order Item Supplied` where reference_name = '%s' and bom_detail_no = '%s' and parent = '%s' " %(d.name, i[6], self.doc.name)):
rm_child = addchild(self.doc, 'po_raw_material_details', 'Purchase Order Item Supplied', 1, self.doclist) rm_child = addchild(self.doc, 'po_raw_material_details', 'Purchase Order Item Supplied', self.doclist)
rm_child.reference_name = d.name rm_child.reference_name = d.name
rm_child.bom_detail_no = i and i[6] or '' rm_child.bom_detail_no = i and i[6] or ''

View File

@@ -41,7 +41,7 @@ class DocType:
specification = sql("select specification, value from `tabItem Quality Inspection Parameter` \ specification = sql("select specification, value from `tabItem Quality Inspection Parameter` \
where parent = '%s' order by idx" % (self.doc.item_code)) where parent = '%s' order by idx" % (self.doc.item_code))
for d in specification: for d in specification:
child = addchild(self.doc, 'qa_specification_details', 'Quality Inspection Reading', 1, self.doclist) child = addchild(self.doc, 'qa_specification_details', 'Quality Inspection Reading', self.doclist)
child.specification = d[0] child.specification = d[0]
child.value = d[1] child.value = d[1]
child.status = 'Accepted' child.status = 'Accepted'

View File

@@ -19,7 +19,7 @@ import webnotes
import webnotes.model import webnotes.model
from webnotes import _, msgprint from webnotes import _, msgprint
from webnotes.utils import cint, flt from webnotes.utils import cint, flt
from webnotes.model.utils import round_doc from webnotes.model.utils import round_floats_in_doc
import json import json
from controllers.transaction_controller import TransactionController from controllers.transaction_controller import TransactionController
@@ -83,7 +83,7 @@ class TaxController(TransactionController):
self.precision.item[base_field]) self.precision.item[base_field])
for item in self.item_doclist: for item in self.item_doclist:
round_doc(item, self.precision.item) round_floats_in_doc(item, self.precision.item)
if item.fields.get(self.fmap.discount) == 100: if item.fields.get(self.fmap.discount) == 100:
if not item.fields.get(self.fmap.print_ref_rate): if not item.fields.get(self.fmap.print_ref_rate):
@@ -126,7 +126,7 @@ class TaxController(TransactionController):
self.validate_included_tax(tax) self.validate_included_tax(tax)
# round relevant values # round relevant values
round_doc(tax, self.precision.tax) round_floats_in_doc(tax, self.precision.tax)
def calculate_net_total(self): def calculate_net_total(self):
self.doc.net_total = 0 self.doc.net_total = 0

View File

@@ -99,7 +99,7 @@ class DocType:
yr_start_date, yr_end_date = self.get_fy_start_end_dates() yr_start_date, yr_end_date = self.get_fy_start_end_dates()
date_list = self.get_weekly_off_date_list(yr_start_date, yr_end_date) date_list = self.get_weekly_off_date_list(yr_start_date, yr_end_date)
for d in date_list: for d in date_list:
ch = addchild(self.doc, 'holiday_list_details', 'Holiday', 1, self.doclist) ch = addchild(self.doc, 'holiday_list_details', 'Holiday', self.doclist)
ch.description = self.doc.weekly_off ch.description = self.doc.weekly_off
ch.holiday_date = d ch.holiday_date = d

View File

@@ -70,7 +70,7 @@ class DocType:
def make_table(self, doct_name, tab_fname, tab_name): def make_table(self, doct_name, tab_fname, tab_name):
list1 = sql("select name from `tab%s` where docstatus != 2" % doct_name) list1 = sql("select name from `tab%s` where docstatus != 2" % doct_name)
for li in list1: for li in list1:
child = addchild(self.doc, tab_fname, tab_name, 1, self.doclist) child = addchild(self.doc, tab_fname, tab_name, self.doclist)
if(tab_fname == 'earning_details'): if(tab_fname == 'earning_details'):
child.e_type = cstr(li[0]) child.e_type = cstr(li[0])
child.modified_value = 0 child.modified_value = 0

View File

@@ -357,7 +357,8 @@ class DocType:
"Add items to Flat BOM table" "Add items to Flat BOM table"
self.doclist = self.doc.clear_table(self.doclist, 'flat_bom_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'flat_bom_details', 1)
for d in self.cur_exploded_items: for d in self.cur_exploded_items:
ch = addchild(self.doc, 'flat_bom_details', 'BOM Explosion Item', 1, self.doclist) ch = addchild(self.doc, 'flat_bom_details', 'BOM Explosion Item',
self.doclist)
for i in d.keys(): for i in d.keys():
ch.fields[i] = d[i] ch.fields[i] = d[i]
ch.docstatus = self.doc.docstatus ch.docstatus = self.doc.docstatus

View File

@@ -91,7 +91,7 @@ cur_frm.cscript.make_se = function(doc, purpose) {
se.company = doc.company; se.company = doc.company;
se.fg_completed_qty = doc.qty - doc.produced_qty; se.fg_completed_qty = doc.qty - doc.produced_qty;
se.bom_no = doc.bom_no; se.bom_no = doc.bom_no;
se.use_multi_level_bom = 1; se.use_multi_level_bom = doc.use_multi_level_bom;
loaddoc('Stock Entry', se.name); loaddoc('Stock Entry', se.name);
} }

View File

@@ -4,7 +4,7 @@
"docstatus": 0, "docstatus": 0,
"creation": "2012-12-20 14:31:18", "creation": "2012-12-20 14:31:18",
"modified_by": "Administrator", "modified_by": "Administrator",
"modified": "2012-12-20 15:50:43" "modified": "2012-12-24 18:39:00"
}, },
{ {
"is_submittable": 1, "is_submittable": 1,
@@ -142,6 +142,14 @@
"fieldtype": "Data", "fieldtype": "Data",
"depends_on": "production_item" "depends_on": "production_item"
}, },
{
"description": "If checked, BOM for sub-assembly items will be considered for getting raw materials. Otherwise, all sub-assembly items will be treated as a raw material.",
"default": "1",
"doctype": "DocField",
"label": "Use Multi-Level BOM",
"fieldname": "use_multi_level_bom",
"fieldtype": "Check"
},
{ {
"read_only": 0, "read_only": 0,
"doctype": "DocField", "doctype": "DocField",

View File

@@ -2,9 +2,9 @@
{ {
"owner": "Administrator", "owner": "Administrator",
"docstatus": 0, "docstatus": 0,
"creation": "2012-07-03 13:30:04", "creation": "2012-12-20 18:14:55",
"modified_by": "Administrator", "modified_by": "Administrator",
"modified": "2012-12-10 18:30:00" "modified": "2012-12-24 19:37:34"
}, },
{ {
"istable": 1, "istable": 1,
@@ -18,6 +18,7 @@
"parent": "Production Plan Item", "parent": "Production Plan Item",
"doctype": "DocField", "doctype": "DocField",
"parenttype": "DocType", "parenttype": "DocType",
"permlevel": 0,
"parentfield": "fields" "parentfield": "fields"
}, },
{ {
@@ -25,14 +26,11 @@
"doctype": "DocType" "doctype": "DocType"
}, },
{ {
"permlevel": 0,
"oldfieldtype": "Link", "oldfieldtype": "Link",
"colour": "White:FFF",
"doctype": "DocField", "doctype": "DocField",
"label": "Item Code", "label": "Item Code",
"oldfieldname": "item_code", "oldfieldname": "item_code",
"width": "150px", "width": "150px",
"trigger": "Client",
"fieldname": "item_code", "fieldname": "item_code",
"fieldtype": "Link", "fieldtype": "Link",
"reqd": 1, "reqd": 1,
@@ -44,11 +42,10 @@
"label": "BOM No", "label": "BOM No",
"oldfieldname": "bom_no", "oldfieldname": "bom_no",
"width": "100px", "width": "100px",
"options": "BOM",
"fieldname": "bom_no", "fieldname": "bom_no",
"fieldtype": "Link", "fieldtype": "Link",
"reqd": 1, "reqd": 1,
"permlevel": 0 "options": "BOM"
}, },
{ {
"default": "0.00", "default": "0.00",
@@ -59,20 +56,20 @@
"width": "100px", "width": "100px",
"fieldname": "planned_qty", "fieldname": "planned_qty",
"fieldtype": "Currency", "fieldtype": "Currency",
"reqd": 1, "reqd": 1
"permlevel": 0
}, },
{ {
"read_only": 1,
"oldfieldtype": "Data", "oldfieldtype": "Data",
"doctype": "DocField", "doctype": "DocField",
"label": "Sales Order", "label": "Sales Order",
"oldfieldname": "source_docname", "oldfieldname": "source_docname",
"options": "Sales Order",
"fieldname": "sales_order", "fieldname": "sales_order",
"fieldtype": "Link", "fieldtype": "Link",
"permlevel": 1 "options": "Sales Order"
}, },
{ {
"read_only": 1,
"default": "0.00", "default": "0.00",
"oldfieldtype": "Currency", "oldfieldtype": "Currency",
"doctype": "DocField", "doctype": "DocField",
@@ -81,10 +78,10 @@
"width": "100px", "width": "100px",
"fieldname": "so_pending_qty", "fieldname": "so_pending_qty",
"fieldtype": "Currency", "fieldtype": "Currency",
"reqd": 0, "reqd": 0
"permlevel": 1
}, },
{ {
"read_only": 1,
"oldfieldtype": "Data", "oldfieldtype": "Data",
"doctype": "DocField", "doctype": "DocField",
"label": "UOM", "label": "UOM",
@@ -92,17 +89,16 @@
"width": "80px", "width": "80px",
"fieldname": "stock_uom", "fieldname": "stock_uom",
"fieldtype": "Data", "fieldtype": "Data",
"reqd": 1, "reqd": 1
"permlevel": 1
}, },
{ {
"read_only": 1,
"oldfieldtype": "Text", "oldfieldtype": "Text",
"doctype": "DocField", "doctype": "DocField",
"label": "Description", "label": "Description",
"oldfieldname": "description", "oldfieldname": "description",
"width": "200px", "width": "200px",
"fieldname": "description", "fieldname": "description",
"fieldtype": "Text", "fieldtype": "Text"
"permlevel": 1
} }
] ]

View File

@@ -2,9 +2,9 @@
{ {
"owner": "Administrator", "owner": "Administrator",
"docstatus": 0, "docstatus": 0,
"creation": "2012-07-03 13:30:04", "creation": "2012-12-20 18:14:56",
"modified_by": "Administrator", "modified_by": "Administrator",
"modified": "2012-12-10 18:30:00" "modified": "2012-12-24 19:38:10"
}, },
{ {
"istable": 1, "istable": 1,
@@ -18,6 +18,7 @@
"parent": "Production Plan Sales Order", "parent": "Production Plan Sales Order",
"doctype": "DocField", "doctype": "DocField",
"parenttype": "DocType", "parenttype": "DocType",
"permlevel": 0,
"parentfield": "fields" "parentfield": "fields"
}, },
{ {
@@ -39,37 +40,36 @@
"label": "Sales Order", "label": "Sales Order",
"oldfieldname": "prevdoc_docname", "oldfieldname": "prevdoc_docname",
"width": "150px", "width": "150px",
"options": "Sales Order",
"fieldname": "sales_order", "fieldname": "sales_order",
"fieldtype": "Link", "fieldtype": "Link",
"permlevel": 0 "options": "Sales Order"
}, },
{ {
"read_only": 1,
"oldfieldtype": "Date", "oldfieldtype": "Date",
"doctype": "DocField", "doctype": "DocField",
"label": "SO Date", "label": "SO Date",
"oldfieldname": "document_date", "oldfieldname": "document_date",
"width": "120px", "width": "120px",
"fieldname": "sales_order_date", "fieldname": "sales_order_date",
"fieldtype": "Date", "fieldtype": "Date"
"permlevel": 1
}, },
{ {
"read_only": 1,
"doctype": "DocField", "doctype": "DocField",
"label": "Customer", "label": "Customer",
"width": "150px", "width": "150px",
"options": "Customer",
"fieldname": "customer", "fieldname": "customer",
"fieldtype": "Link", "fieldtype": "Link",
"permlevel": 1 "options": "Customer"
}, },
{ {
"read_only": 1,
"doctype": "DocField", "doctype": "DocField",
"label": "Grand Total", "label": "Grand Total",
"width": "120px", "width": "120px",
"fieldname": "grand_total", "fieldname": "grand_total",
"fieldtype": "Currency", "fieldtype": "Currency"
"permlevel": 1
}, },
{ {
"write": 1, "write": 1,

View File

@@ -101,7 +101,7 @@ class DocType:
for r in open_so: for r in open_so:
if cstr(r['name']) not in so_list: if cstr(r['name']) not in so_list:
pp_so = addchild(self.doc, 'pp_so_details', pp_so = addchild(self.doc, 'pp_so_details',
'Production Plan Sales Order', 1, self.doclist) 'Production Plan Sales Order', self.doclist)
pp_so.sales_order = r['name'] pp_so.sales_order = r['name']
pp_so.sales_order_date = cstr(r['transaction_date']) pp_so.sales_order_date = cstr(r['transaction_date'])
pp_so.customer = cstr(r['customer']) pp_so.customer = cstr(r['customer'])
@@ -150,7 +150,7 @@ class DocType:
for p in items: for p in items:
item_details = sql("""select description, stock_uom, default_bom item_details = sql("""select description, stock_uom, default_bom
from tabItem where name=%s""", p['item_code']) from tabItem where name=%s""", p['item_code'])
pi = addchild(self.doc, 'pp_details', 'Production Plan Item', 1, self.doclist) pi = addchild(self.doc, 'pp_details', 'Production Plan Item', self.doclist)
pi.sales_order = p['parent'] pi.sales_order = p['parent']
pi.item_code = p['item_code'] pi.item_code = p['item_code']
pi.description = item_details and item_details[0][0] or '' pi.description = item_details and item_details[0][0] or ''

View File

@@ -7,7 +7,7 @@ def execute():
webnotes.conn.sql("delete from `tabDocPerm` where role = 'All' and permlevel = 0 and parent in ('Appraisal', 'Ticket', 'Project')") webnotes.conn.sql("delete from `tabDocPerm` where role = 'All' and permlevel = 0 and parent in ('Appraisal', 'Ticket', 'Project')")
appr = get_obj('DocType', 'Appraisal', with_children=1) appr = get_obj('DocType', 'Appraisal', with_children=1)
ch = addchild(appr.doc, 'permissions', 'DocPerm', 0) ch = addchild(appr.doc, 'permissions', 'DocPerm')
ch.permlevel = 0 ch.permlevel = 0
ch.role = 'Employee' ch.role = 'Employee'
ch.read = 1 ch.read = 1

View File

@@ -11,7 +11,7 @@ def execute():
addr = get_obj('DocType', 'Address', with_children=1) addr = get_obj('DocType', 'Address', with_children=1)
for d in role1+role2: for d in role1+role2:
ch = addchild(addr.doc, 'permissions', 'DocPerm', 0) ch = addchild(addr.doc, 'permissions', 'DocPerm')
ch.role = d ch.role = d
ch.read = 1 ch.read = 1
ch.write = 1 ch.write = 1

View File

@@ -7,3 +7,6 @@ def execute():
webnotes.conn.sql("""update `tabStock Entry` webnotes.conn.sql("""update `tabStock Entry`
set use_multi_level_bom = if(consider_sa_items_as_raw_materials='Yes', 0, 1)""") set use_multi_level_bom = if(consider_sa_items_as_raw_materials='Yes', 0, 1)""")
webnotes.conn.sql("""update `tabProduction Order`
set use_multi_level_bom = if(consider_sa_items_as_raw_materials='Yes', 0, 1)
where use_multi_level_bom is null""")

View File

@@ -14,15 +14,29 @@
// 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.fields_dict['project'].get_query = function(doc,cdt,cdn){ wn.provide("erpnext.projects");
var cond='';
if(doc.customer) cond = 'ifnull(`tabProject`.customer, "") = "'+doc.customer+'" AND'; erpnext.projects.Task = erpnext.utils.Controller.extend({
return repl('SELECT distinct `tabProject`.`name` FROM `tabProject` \ setup: function() {
WHERE %(cond)s `tabProject`.`name` LIKE "%s" \ this.frm.fields_dict.project.get_query = function() {
ORDER BY `tabProject`.`name` ASC LIMIT 50', {cond:cond}); return "select name from `tabProject` \
where %(key)s like \"%s\" \
order by name asc limit 50";
};
},
project: function() {
if(this.frm.doc.project) {
get_server_fields('get_project_details', '','', doc, cdt, cdn, 1);
} }
},
after_save: function() {
this.frm.doc.project && wn.model.remove_from_locals("Project",
this.frm.doc.project);
},
});
cur_frm.cscript.project = function(doc, cdt, cdn){ cur_frm.cscript = new erpnext.projects.Task({frm: cur_frm});
if(doc.project) get_server_fields('get_project_details', '','', doc, cdt, cdn, 1);
}

View File

@@ -60,7 +60,7 @@ erpnext.toolbar.add_modules = function() {
for(var i in modules_list) { for(var i in modules_list) {
var m = modules_list[i] var m = modules_list[i]
if(m!='Setup' && wn.boot.profile.allow_modules.indexOf(m)!=-1) { if(m!='Setup' && wn.boot.profile.allow_modules.indexOf(m)!=-1 && wn.modules[m]) {
args = { args = {
module: m, module: m,
module_page: wn.modules[m].link, module_page: wn.modules[m].link,

View File

@@ -14,6 +14,7 @@ erpnext.send_message = function(opts) {
cmd: "website.send_message", cmd: "website.send_message",
subject: opts.subject, subject: opts.subject,
sender: opts.sender, sender: opts.sender,
status: opts.status,
message: typeof opts.message == "string" message: typeof opts.message == "string"
? opts.message ? opts.message
: JSON.stringify(opts.message) : JSON.stringify(opts.message)

View File

@@ -123,7 +123,7 @@ class DocType(TransactionBase):
user_lst.append(chk[0][0]) user_lst.append(chk[0][0])
for d in user_lst: for d in user_lst:
ch = addchild(ev, 'event_individuals', 'Event User', 0) ch = addchild(ev, 'event_individuals', 'Event User')
ch.person = d ch.person = d
ch.save(1) ch.save(1)

View File

@@ -19,7 +19,7 @@ import webnotes
from webnotes.utils import cstr, load_json from webnotes.utils import cstr, load_json
from webnotes.model import db_exists from webnotes.model import db_exists
from webnotes.model.doc import Document, addchild from webnotes.model.doc import Document
from webnotes.model.wrapper import getlist, copy_doclist from webnotes.model.wrapper import getlist, copy_doclist
from webnotes.model.code import get_obj from webnotes.model.code import get_obj
from webnotes import msgprint from webnotes import msgprint

View File

@@ -75,7 +75,7 @@ class DocType(TransactionBase):
obj.doclist = obj.doc.clear_table(obj.doclist,'sales_team') obj.doclist = obj.doc.clear_table(obj.doclist,'sales_team')
idx = 0 idx = 0
for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % obj.doc.customer): for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % obj.doc.customer):
ch = addchild(obj.doc, 'sales_team', 'Sales Team', 1, obj.doclist) ch = addchild(obj.doc, 'sales_team', 'Sales Team', obj.doclist)
ch.sales_person = d and cstr(d[0]) or '' ch.sales_person = d and cstr(d[0]) or ''
ch.allocated_percentage = d and flt(d[1]) or 0 ch.allocated_percentage = d and flt(d[1]) or 0
ch.allocated_amount = d and flt(d[2]) or 0 ch.allocated_amount = d and flt(d[2]) or 0
@@ -265,7 +265,7 @@ class DocType(TransactionBase):
for field in default_fields: for field in default_fields:
if field in other: del other[field] if field in other: del other[field]
d = addchild(obj.doc, 'other_charges', 'Sales Taxes and Charges', 1, d = addchild(obj.doc, 'other_charges', 'Sales Taxes and Charges',
obj.doclist) obj.doclist)
d.fields.update(other) d.fields.update(other)
d.rate = flt(d.rate) d.rate = flt(d.rate)
@@ -481,7 +481,8 @@ class DocType(TransactionBase):
break break
if not exists: if not exists:
pi = addchild(obj.doc, 'packing_details', 'Delivery Note Packing Item', 1, obj.doclist) pi = addchild(obj.doc, 'packing_details', 'Delivery Note Packing Item',
obj.doclist)
pi.parent_item = line.item_code pi.parent_item = line.item_code
pi.item_code = packing_item_code pi.item_code = packing_item_code

View File

@@ -239,13 +239,13 @@ class DocType:
def add_roles(self, pr): def add_roles(self, pr):
roles_list = ['Accounts Manager', 'Accounts User', 'Blogger', 'HR Manager', 'HR User', 'Maintenance User', 'Maintenance Manager', 'Material Manager', 'Material User', 'Material Master Manager', 'Manufacturing Manager', 'Manufacturing User', 'Projects User', 'Purchase Manager', 'Purchase User', 'Purchase Master Manager', 'Quality Manager', 'Sales Manager', 'Sales User', 'Sales Master Manager', 'Support Manager', 'Support Team', 'System Manager', 'Website Manager'] roles_list = ['Accounts Manager', 'Accounts User', 'Blogger', 'HR Manager', 'HR User', 'Maintenance User', 'Maintenance Manager', 'Material Manager', 'Material User', 'Material Master Manager', 'Manufacturing Manager', 'Manufacturing User', 'Projects User', 'Purchase Manager', 'Purchase User', 'Purchase Master Manager', 'Quality Manager', 'Sales Manager', 'Sales User', 'Sales Master Manager', 'Support Manager', 'Support Team', 'System Manager', 'Website Manager']
for r in roles_list: for r in roles_list:
d = addchild(pr, 'userroles', 'UserRole', 1) d = addchild(pr, 'userroles', 'UserRole')
d.role = r d.role = r
d.save(1) d.save(1)
# Add roles to Administrator profile # Add roles to Administrator profile
pr = Document('Profile','Administrator') pr = Document('Profile','Administrator')
for r in roles_list: for r in roles_list:
d = addchild(pr,'userroles', 'UserRole', 1) d = addchild(pr,'userroles', 'UserRole')
d.role = r d.role = r
d.save(1) d.save(1)

View File

@@ -350,7 +350,7 @@ class DocType:
reaches re-order level when %s %s was created""" % (doc_type,doc_name) reaches re-order level when %s %s was created""" % (doc_type,doc_name)
indent.save(1) indent.save(1)
indent_obj = get_obj('Purchase Request',indent.name,with_children=1) indent_obj = get_obj('Purchase Request',indent.name,with_children=1)
indent_details_child = addchild(indent_obj.doc,'indent_details','Purchase Request Item',0) indent_details_child = addchild(indent_obj.doc,'indent_details','Purchase Request Item')
indent_details_child.item_code = self.doc.item_code indent_details_child.item_code = self.doc.item_code
indent_details_child.uom = self.doc.stock_uom indent_details_child.uom = self.doc.stock_uom
indent_details_child.warehouse = self.doc.warehouse indent_details_child.warehouse = self.doc.warehouse

View File

@@ -70,7 +70,8 @@ class DocType:
raise Exception raise Exception
if not cstr(self.doc.stock_uom) in check_list : if not cstr(self.doc.stock_uom) in check_list :
child = addchild( self.doc, 'uom_conversion_details', 'UOM Conversion Detail', 1, self.doclist) child = addchild( self.doc, 'uom_conversion_details',
'UOM Conversion Detail', self.doclist)
child.uom = self.doc.stock_uom child.uom = self.doc.stock_uom
child.conversion_factor = 1 child.conversion_factor = 1
child.save() child.save()

View File

@@ -51,7 +51,8 @@ class DocType:
msgprint("Please enter date of shorter duration as there are too many purchase receipt, hence it cannot be loaded.", raise_exception=1) msgprint("Please enter date of shorter duration as there are too many purchase receipt, hence it cannot be loaded.", raise_exception=1)
for i in pr: for i in pr:
ch = addchild(self.doc, 'lc_pr_details', 'Landed Cost Purchase Receipt', 1, self.doclist) ch = addchild(self.doc, 'lc_pr_details', 'Landed Cost Purchase Receipt',
self.doclist)
ch.purchase_receipt = i and i['name'] or '' ch.purchase_receipt = i and i['name'] or ''
ch.save() ch.save()
@@ -62,7 +63,8 @@ class DocType:
idx = 0 idx = 0
landed_cost = sql("select account_head, description from `tabLanded Cost Master Detail` where parent=%s", (self.doc.landed_cost), as_dict = 1) landed_cost = sql("select account_head, description from `tabLanded Cost Master Detail` where parent=%s", (self.doc.landed_cost), as_dict = 1)
for cost in landed_cost: for cost in landed_cost:
lct = addchild(self.doc, 'landed_cost_details', 'Landed Cost Item', 1, self.doclist) lct = addchild(self.doc, 'landed_cost_details', 'Landed Cost Item',
self.doclist)
lct.account_head = cost['account_head'] lct.account_head = cost['account_head']
lct.description = cost['description'] lct.description = cost['description']
@@ -100,7 +102,7 @@ class DocType:
pr_oc_row = sql("select name from `tabPurchase Taxes and Charges` where parent = %s and category = 'Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s",(pr, lc.account_head)) pr_oc_row = sql("select name from `tabPurchase Taxes and Charges` where parent = %s and category = 'Valuation' and add_deduct_tax = 'Add' and charge_type = 'Actual' and account_head = %s",(pr, lc.account_head))
if not pr_oc_row: # add if not exists if not pr_oc_row: # add if not exists
ch = addchild(pr_obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges', 1) ch = addchild(pr_obj.doc, 'purchase_tax_details', 'Purchase Taxes and Charges')
ch.category = 'Valuation' ch.category = 'Valuation'
ch.add_deduct_tax = 'Add' ch.add_deduct_tax = 'Add'
ch.charge_type = 'Actual' ch.charge_type = 'Actual'

View File

@@ -390,7 +390,7 @@ class DocType(TransactionBase):
if i and not sql("select name from `tabPurchase Receipt Item Supplied` where reference_name = '%s' and bom_detail_no = '%s' and parent = '%s' " %(d.name, i[6], self.doc.name)): if i and not sql("select name from `tabPurchase Receipt Item Supplied` where reference_name = '%s' and bom_detail_no = '%s' and parent = '%s' " %(d.name, i[6], self.doc.name)):
rm_child = addchild(self.doc, 'pr_raw_material_details', 'Purchase Receipt Item Supplied', 1, self.doclist) rm_child = addchild(self.doc, 'pr_raw_material_details', 'Purchase Receipt Item Supplied', self.doclist)
rm_child.reference_name = d.name rm_child.reference_name = d.name
rm_child.bom_detail_no = i and i[6] or '' rm_child.bom_detail_no = i and i[6] or ''

View File

@@ -52,7 +52,8 @@ class DocType :
def create_item_table(self, det): def create_item_table(self, det):
self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1) self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1)
for i in det: for i in det:
ch = addchild(self.doc, 'return_details', 'Sales and Purchase Return Item', 1, self.doclist) ch = addchild(self.doc, 'return_details', 'Sales and Purchase Return Item',
self.doclist)
ch.detail_name = i and i[0] or '' ch.detail_name = i and i[0] or ''
ch.item_code = i and i[1] or '' ch.item_code = i and i[1] or ''
ch.description = i and i[2] or '' ch.description = i and i[2] or ''

View File

@@ -160,6 +160,7 @@ fld.get_query = function(doc, cdt, cdn) {
return 'SELECT tabItem.name, tabItem.description, tabBin.actual_qty ' return 'SELECT tabItem.name, tabItem.description, tabBin.actual_qty '
+ 'FROM tabItem, tabBin ' + 'FROM tabItem, tabBin '
+ 'WHERE tabItem.name = tabBin.item_code ' + 'WHERE tabItem.name = tabBin.item_code '
+ 'AND tabItem.is_stock_item = "Yes"'
+ 'AND ifnull(`tabBin`.`actual_qty`,0) > 0 ' + 'AND ifnull(`tabBin`.`actual_qty`,0) > 0 '
+ 'AND tabBin.warehouse="'+ d.s_warehouse +'" ' + 'AND tabBin.warehouse="'+ d.s_warehouse +'" '
+ 'AND tabItem.docstatus < 2 ' + 'AND tabItem.docstatus < 2 '
@@ -171,6 +172,7 @@ fld.get_query = function(doc, cdt, cdn) {
return 'SELECT tabItem.name, tabItem.description ' return 'SELECT tabItem.name, tabItem.description '
+ 'FROM tabItem ' + 'FROM tabItem '
+ 'WHERE tabItem.docstatus < 2 ' + 'WHERE tabItem.docstatus < 2 '
+ 'AND tabItem.is_stock_item = "Yes"'
+ 'AND (ifnull(`tabItem`.`end_of_life`,"") = "" OR `tabItem`.`end_of_life` > NOW() OR `tabItem`.`end_of_life`="0000-00-00") ' + 'AND (ifnull(`tabItem`.`end_of_life`,"") = "" OR `tabItem`.`end_of_life` > NOW() OR `tabItem`.`end_of_life`="0000-00-00") '
+ 'AND tabItem.%(key)s LIKE "%s" ' + 'AND tabItem.%(key)s LIKE "%s" '
+ 'ORDER BY tabItem.name ASC ' + 'ORDER BY tabItem.name ASC '

View File

@@ -36,7 +36,6 @@ class DocType(TransactionBase):
def validate(self): def validate(self):
self.validate_serial_nos() self.validate_serial_nos()
pro_obj = self.doc.production_order and \ pro_obj = self.doc.production_order and \
get_obj('Production Order', self.doc.production_order) or None get_obj('Production Order', self.doc.production_order) or None
@@ -467,7 +466,8 @@ class DocType(TransactionBase):
def add_to_stock_entry_detail(self, source_wh, target_wh, item_dict, bom_no=None): def add_to_stock_entry_detail(self, source_wh, target_wh, item_dict, bom_no=None):
for d in item_dict: for d in item_dict:
se_child = addchild(self.doc, 'mtn_details', 'Stock Entry Detail', 0, self.doclist) se_child = addchild(self.doc, 'mtn_details', 'Stock Entry Detail',
self.doclist)
se_child.s_warehouse = source_wh se_child.s_warehouse = source_wh
se_child.t_warehouse = target_wh se_child.t_warehouse = target_wh
se_child.item_code = cstr(d) se_child.item_code = cstr(d)
@@ -543,6 +543,6 @@ class DocType(TransactionBase):
@webnotes.whitelist() @webnotes.whitelist()
def get_production_order_details(production_order): def get_production_order_details(production_order):
result = webnotes.conn.sql("""select bom_no, result = webnotes.conn.sql("""select bom_no,
ifnull(qty, 0) - ifnull(produced_qty, 0) as fg_completed_qty ifnull(qty, 0) - ifnull(produced_qty, 0) as fg_completed_qty, use_multi_level_bom
from `tabProduction Order` where name = %s""", production_order, as_dict=1) from `tabProduction Order` where name = %s""", production_order, as_dict=1)
return result and result[0] or {} return result and result[0] or {}

View File

@@ -29,6 +29,14 @@ class DocType:
self.doc = doc self.doc = doc
self.doclist = doclist self.doclist = doclist
def validate(self):
self.validate_mandatory()
self.validate_posting_time()
self.validate_item()
self.actual_amt_check()
self.check_stock_frozen_date()
self.scrub_posting_time()
#check for item quantity available in stock #check for item quantity available in stock
def actual_amt_check(self): def actual_amt_check(self):
if self.doc.batch_no: if self.doc.batch_no:
@@ -53,7 +61,9 @@ class DocType:
msgprint("Warehouse: '%s' does not exist in the system. Please check." % self.doc.fields.get(k), raise_exception = 1) msgprint("Warehouse: '%s' does not exist in the system. Please check." % self.doc.fields.get(k), raise_exception = 1)
def validate_item(self): def validate_item(self):
item_det = sql("select name, has_batch_no, docstatus from tabItem where name = '%s'" % self.doc.item_code) item_det = sql("""select name, has_batch_no, docstatus,
ifnull(is_stock_item, 'No') from tabItem where name=%s""",
self.doc.item_code)
# check item exists # check item exists
if item_det: if item_det:
@@ -61,6 +71,10 @@ class DocType:
else: else:
msgprint("Item: '%s' does not exist in the system. Please check." % self.doc.item_code, raise_exception = 1) msgprint("Item: '%s' does not exist in the system. Please check." % self.doc.item_code, raise_exception = 1)
if item_det[3]!='Yes':
webnotes.msgprint("""Item: "%s" is not a Stock Item.""" % self.doc.item_code,
raise_exception=1)
# check if item is trashed # check if item is trashed
if cint(item_det[2])==2: if cint(item_det[2])==2:
msgprint("Item: '%s' is trashed, cannot make a stock transaction against a trashed item" % self.doc.item_code, raise_exception = 1) msgprint("Item: '%s' is trashed, cannot make a stock transaction against a trashed item" % self.doc.item_code, raise_exception = 1)
@@ -97,11 +111,3 @@ class DocType:
if len(self.doc.posting_time.split(':')) > 2: if len(self.doc.posting_time.split(':')) > 2:
self.doc.posting_time = '00:00' self.doc.posting_time = '00:00'
def validate(self):
self.validate_mandatory()
self.validate_posting_time()
self.validate_item()
self.actual_amt_check()
self.check_stock_frozen_date()
self.scrub_posting_time()

View File

@@ -63,7 +63,8 @@ class DocType(TransactionBase):
s_list =[] s_list =[]
s_list = self.create_schedule_list(d.start_date, d.end_date, d.no_of_visits) s_list = self.create_schedule_list(d.start_date, d.end_date, d.no_of_visits)
for i in range(d.no_of_visits): for i in range(d.no_of_visits):
child = addchild(self.doc,'maintenance_schedule_detail','Maintenance Schedule Detail',1,self.doclist) child = addchild(self.doc, 'maintenance_schedule_detail',
'Maintenance Schedule Detail', self.doclist)
child.item_code = d.item_code child.item_code = d.item_code
child.item_name = d.item_name child.item_name = d.item_name
child.scheduled_date = s_list[i].strftime('%Y-%m-%d') child.scheduled_date = s_list[i].strftime('%Y-%m-%d')

View File

@@ -220,7 +220,7 @@ class TransactionBase:
self.doclist = self.doc.clear_table(self.doclist,'sales_team') self.doclist = self.doc.clear_table(self.doclist,'sales_team')
idx = 0 idx = 0
for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name): for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name):
ch = addchild(self.doc, 'sales_team', 'Sales Team', 1, self.doclist) ch = addchild(self.doc, 'sales_team', 'Sales Team', self.doclist)
ch.sales_person = d and cstr(d[0]) or '' ch.sales_person = d and cstr(d[0]) or ''
ch.allocated_percentage = d and flt(d[1]) or 0 ch.allocated_percentage = d and flt(d[1]) or 0
ch.allocated_amount = d and flt(d[2]) or 0 ch.allocated_amount = d and flt(d[2]) or 0

View File

@@ -11,12 +11,12 @@ max_tickets_per_hour = 200
@webnotes.whitelist(allow_guest=True) @webnotes.whitelist(allow_guest=True)
def send_message(): def send_message():
from webnotes.model.doc import Document from webnotes.model.doc import Document
args = webnotes.form_dict
d = Document('Support Ticket') d = Document('Support Ticket')
d.subject = webnotes.form_dict.get('subject', 'Website Query') d.subject = webnotes.form_dict.get('subject', 'Website Query')
d.description = webnotes.form_dict.get('message') d.description = webnotes.form_dict.get('message')
d.raised_by = webnotes.form_dict.get('sender') d.raised_by = webnotes.form_dict.get('sender')
d.status = webnotes.form_dict.get("status") or "Open"
if not d.description: if not d.description:
webnotes.response["message"] = 'Please write something' webnotes.response["message"] = 'Please write something'