fixed conflict

This commit is contained in:
Nabin Hait 2012-07-03 12:14:48 +05:30
commit fdb1993125
61 changed files with 642 additions and 225 deletions

View File

@ -44,7 +44,7 @@ class DocType:
dl = sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and (t1.cheque_no is not null or t1.cheque_no != '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date))
self.doc.clear_table(self.doclist, 'entries')
self.doclist = self.doc.clear_table(self.doclist, 'entries')
self.doc.total_amount = 0.0
for d in dl:

View File

@ -20,6 +20,6 @@ cur_frm.cscript.onload = function(doc,cdt,cdn){
refresh_field('budget_distribution_details');
}
$c('runserverobj',args={'method' : 'get_months', 'docs' : compress_doclist([doc])},callback1);
$c('runserverobj',args={'method' : 'get_months', 'docs' : compress_doclist(make_doclist(doc.doctype, doc.name))},callback1);
}
}

View File

@ -77,7 +77,7 @@ class DocType(TransactionBase):
# Get TDS Return acknowledgement
#-------------------------------
def get_return_ack_details(self):
self.doc.clear_table(self.doclist, 'form_16A_ack_details')
self.doclist = self.doc.clear_table(self.doclist, 'form_16A_ack_details')
if not (self.doc.from_date and self.doc.to_date):
msgprint("Please enter From Date, To Date")
else:
@ -90,7 +90,7 @@ class DocType(TransactionBase):
# Get tds payment details
#-------------------------------
def get_tds(self):
self.doc.clear_table(self.doclist,'form_16A_tax_details')
self.doclist = self.doc.clear_table(self.doclist,'form_16A_tax_details')
import datetime
if self.doc.from_date and self.doc.to_date and self.doc.tds_category:
tot=0.0

View File

@ -289,7 +289,7 @@ class DocType:
def get_advances(self, obj, account_head, table_name,table_field_name, dr_or_cr):
jv_detail = webnotes.conn.sql("select t1.name, t1.remark, t2.%s, t2.name, t1.ded_amount from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t1.name = t2.parent and (t2.against_voucher is null or t2.against_voucher = '') and (t2.against_invoice is null or t2.against_invoice = '') and (t2.against_jv is null or t2.against_jv = '') and t2.account = '%s' and t2.is_advance = 'Yes' and t1.docstatus = 1 order by t1.voucher_date " % (dr_or_cr,account_head))
# clear advance table
obj.doc.clear_table(obj.doclist,table_field_name)
obj.doclist = obj.doc.clear_table(obj.doclist,table_field_name)
# Create advance table
for d in jv_detail:
add = addchild(obj.doc, table_field_name, table_name, 1, obj.doclist)
@ -300,6 +300,8 @@ class DocType:
add.allocate_amount = 0
if table_name == 'Purchase Invoice Advance':
add.tds_amount = flt(d[4])
return obj.doclist
# Clear rows which is not adjusted
#-------------------------------------

View File

@ -378,7 +378,7 @@ class DocType:
# get outstanding invoices
# -------------------------
def get_outstanding_invoices(self):
self.doc.clear_table(self.doclist, 'entries')
self.doclist = self.doc.clear_table(self.doclist, 'entries')
total = 0
for d in self.get_values():
total += flt(d[2])

View File

@ -73,7 +73,7 @@ class DocType:
Payment entry will be decided based on account type (Dr/Cr)
"""
self.doc.clear_table(self.doclist, 'ir_payment_details')
self.doclist = self.doc.clear_table(self.doclist, 'ir_payment_details')
gle = self.get_gl_entries()
self.create_payment_table(gle)

View File

@ -170,7 +170,7 @@ class DocType(TransactionBase):
# Advance Allocation
# -------------------
def get_advances(self):
get_obj('GL Control').get_advances( self, self.doc.credit_to, 'Purchase Invoice Advance','advance_allocation_details','debit')
self.doclist = get_obj('GL Control').get_advances(self, self.doc.credit_to, 'Purchase Invoice Advance','advance_allocation_details','debit')
# ============= OTHER CHARGES ====================
@ -183,7 +183,7 @@ class DocType(TransactionBase):
# Get Purchase Taxes and Charges Master
# -----------------------------------------------------------
def get_purchase_tax_details(self):
return get_obj('Purchase Common').get_purchase_tax_details(self)
self.doclist = get_obj('Purchase Common').get_purchase_tax_details(self)
def get_rate1(self,acc):

View File

@ -140,13 +140,13 @@ class DocType(TransactionBase):
# Delivery Note
if self.doc.delivery_note_main:
self.validate_prev_docname('delivery note')
self.doc.clear_table(self.doclist,'other_charges')
self.doclist = self.doc.clear_table(self.doclist,'other_charges')
self.doclist = get_obj('DocType Mapper', 'Delivery Note-Sales Invoice').dt_map('Delivery Note', 'Sales Invoice', self.doc.delivery_note_main, self.doc, self.doclist, "[['Delivery Note', 'Sales Invoice'],['Delivery Note Item', 'Sales Invoice Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team']]")
self.get_income_account('entries')
# Sales Order
elif self.doc.sales_order_main:
self.validate_prev_docname('sales order')
self.doc.clear_table(self.doclist,'other_charges')
self.doclist = self.doc.clear_table(self.doclist,'other_charges')
get_obj('DocType Mapper', 'Sales Order-Sales Invoice').dt_map('Sales Order', 'Sales Invoice', self.doc.sales_order_main, self.doc, self.doclist, "[['Sales Order', 'Sales Invoice'],['Sales Order Item', 'Sales Invoice Item'],['Sales Taxes and Charges','Sales Taxes and Charges'], ['Sales Team', 'Sales Team']]")
self.get_income_account('entries')
@ -240,18 +240,17 @@ class DocType(TransactionBase):
# Load Default Charges
# ----------------------------------------------------------
def load_default_taxes(self):
return get_obj('Sales Common').load_default_taxes(self)
self.doclist = get_obj('Sales Common').load_default_taxes(self)
# Get Sales Taxes and Charges Master Details
# --------------------------
def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self)
self.doclist = get_obj('Sales Common').get_other_charges(self)
# Get Advances
# -------------
def get_advances(self):
get_obj('GL Control').get_advances(self, self.doc.debit_to, 'Sales Invoice Advance', 'advance_adjustment_details', 'credit')
self.doclist = get_obj('GL Control').get_advances(self, self.doc.debit_to, 'Sales Invoice Advance', 'advance_adjustment_details', 'credit')
#pull project customer
#-------------------------

View File

@ -67,7 +67,7 @@ class DocType:
# Fetch voucherwise tds details
#-------------------------------
def get_tds_list(self):
self.doc.clear_table(self.doclist,'tds_payment_details')
self.doclist = self.doc.clear_table(self.doclist,'tds_payment_details')
self.doc.total_tds = 0
import datetime
if not self.doc.tds_category:

View File

@ -131,7 +131,7 @@ class DocType(TransactionBase):
'warehouse': wh,
'item_tax_rate': json.dumps(t),
'batch_no': '',
'discount_rate': 0
'discount_rate': 0
}
# get min_order_qty from item
@ -170,6 +170,14 @@ class DocType(TransactionBase):
'import_rate': 0,
})
if obj.doc.doctype == 'Purchase Order':
supplier_part_no = webnotes.conn.sql("""\
select supplier_part_no from `tabItem Supplier`
where parent = %s and parenttype = 'Item' and
supplier = %s""", (arg['item_code'], obj.doc.supplier))
if supplier_part_no and supplier_part_no[0][0]:
ret['supplier_part_no'] = supplier_part_no[0][0]
return ret
# Get Available Qty at Warehouse
@ -621,7 +629,7 @@ class DocType(TransactionBase):
# Get other charges from Master
# =================================================================================
def get_purchase_tax_details(self,obj):
self.doc.clear_table(obj.doclist,'purchase_tax_details')
obj.doclist = self.doc.clear_table(obj.doclist,'purchase_tax_details')
idx = 0
other_charge = sql("select category, add_deduct_tax, charge_type,row_id,description,account_head,rate,tax_amount from `tabPurchase Taxes and Charges` where parent = '%s' order by idx" %(obj.doc.purchase_other_charges), as_dict = 1)
for other in other_charge:
@ -636,6 +644,7 @@ class DocType(TransactionBase):
d.tax_amount = flt(other['tax_amount'])
d.idx = idx
idx += 1
return obj.doclist
# Get Tax rate if account type is TAX

View File

@ -291,7 +291,7 @@ class DocType(TransactionBase):
if self.doc.is_subcontracted == 'Yes':
self.add_bom(d)
else:
self.doc.clear_table(self.doclist,'po_raw_material_details',1)
self.doclist = self.doc.clear_table(self.doclist,'po_raw_material_details',1)
self.doc.save()
elif item_det[0][1] == 'No':
self.add_bom(d)
@ -371,4 +371,4 @@ class DocType(TransactionBase):
# **** Pull details from other charges master (Get Other Charges) ****
def get_purchase_tax_details(self):
return get_obj('Purchase Common').get_purchase_tax_details(self)
self.doclist = get_obj('Purchase Common').get_purchase_tax_details(self)

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2012-03-27 14:35:50',
'creation': '2012-05-15 12:14:38',
'docstatus': 0,
'modified': '2012-03-27 14:35:50',
'modified': '2012-06-29 13:05:33',
'modified_by': u'Administrator',
'owner': u'Administrator'
},
@ -22,7 +22,7 @@
'section_style': u'Tray',
'server_code_error': u' ',
'show_in_menu': 0,
'version': 65
'version': 1
},
# These values are common for all DocField
@ -74,6 +74,19 @@
'trigger': u'Client'
},
# DocField
{
'colour': u'White:FFF',
'description': u'If Supplier Part Number exists for given Item, it gets stored here',
'doctype': u'DocField',
'fieldname': u'supplier_part_no',
'fieldtype': u'Data',
'hidden': 1,
'label': u'Supplier Part Number',
'permlevel': 1,
'print_hide': 1
},
# DocField
{
'doctype': u'DocField',
@ -453,4 +466,4 @@
'permlevel': 0,
'print_hide': 1
}
]
]

View File

@ -45,7 +45,7 @@ class DocType:
def get_item_specification_details(self):
self.doc.clear_table(self.doclist, 'qa_specification_details')
self.doclist = self.doc.clear_table(self.doclist, 'qa_specification_details')
specification = sql("select specification, value from `tabItem Quality Inspection Parameter` \
where parent = '%s' order by idx" % (self.doc.item_code))
for d in specification:
@ -65,4 +65,4 @@ class DocType:
if self.doc.purchase_receipt_no:
sql("update `tabPurchase Receipt Item` t1, `tabPurchase Receipt` t2 set t1.qa_no = '', t2.modified = '%s' \
where t1.parent = '%s' and t1.item_code = '%s' and t1.parent = t2.name" \
% (self.doc.modified, self.doc.purchase_receipt_no, self.doc.item_code))
% (self.doc.modified, self.doc.purchase_receipt_no, self.doc.item_code))

View File

@ -62,24 +62,9 @@ cur_frm.cscript.make_address = function() {
},
as_dict: 1,
no_results_message: 'No addresses created',
render_row: function(wrapper, data) {
$(wrapper).css('padding','5px 0px');
var link = $ln(wrapper,cstr(data.name), function() { loaddoc("Address", this.dn); }, {fontWeight:'bold'});
link.dn = data.name
$a(wrapper,'span','',{marginLeft:'5px', color: '#666'},(data.is_primary_address ? '[Primary]' : '') + (data.is_shipping_address ? '[Shipping]' : ''));
$a(wrapper,'div','',{marginTop:'5px', color:'#555'},
(data.address_line1 ? data.address_line1 + '<br />' : '') +
(data.address_line2 ? data.address_line2 + '<br />' : '') +
(data.city ? data.city + '<br />' : '') +
(data.state ? data.state + ', ' : '') +
(data.country ? data.country + '<br />' : '') +
(data.pincode ? 'Pincode: ' + data.pincode + '<br />' : '') +
(data.phone ? 'Phone: ' + data.phone + '<br />' : '') +
(data.fax ? 'Fax: ' + data.fax + '<br />' : '') +
(data.email_id ? 'Email: ' + data.email_id + '<br />' : ''));
}
render_row: cur_frm.cscript.render_address_row,
});
// note: render_address_row is defined in contact_control.js
}
cur_frm.address_list.run();
}
@ -95,15 +80,9 @@ cur_frm.cscript.make_contact = function() {
},
as_dict: 1,
no_results_message: 'No contacts created',
render_row: function(wrapper, data) {
$(wrapper).css('padding', '5px 0px');
var link = $ln(wrapper, cstr(data.name), function() { loaddoc("Contact", this.dn); }, {fontWeight:'bold'});
link.dn = data.name
$a(wrapper,'span','',{marginLeft:'5px', color: '#666'},(data.is_primary_contact ? '[Primary]' : ''));
$a(wrapper,'div', '',{marginTop:'5px', color:'#555'}, data.first_name + (data.last_name ? ' ' + data.last_name + '<br />' : '<br>') + (data.phone ? 'Tel: ' + data.phone + '<br />' : '') + (data.mobile_no ? 'Mobile: ' + data.mobile_no + '<br />' : '') + (data.email_id ? 'Email: ' + data.email_id + '<br />' : '') + (data.department ? 'Department: ' + data.department + '<br />' : '') + (data.designation ? 'Designation: ' + data.designation + '<br />' : ''));
}
render_row: cur_frm.cscript.render_contact_row,
});
// note: render_contact_row is defined in contact_control.js
}
cur_frm.contact_list.run();
}

View File

@ -14,6 +14,12 @@
<br>
<h4><a href="#!List/Item">Item</a></h4>
<p class="help">Item Master</p>
<br>
<h4><a href="#!List/Contact">Contact</a></h4>
<p class="help">Contact Master</p>
<br>
<h4><a href="#!List/Address">Address</a></h4>
<p class="help">Address Master</p>
</div>
<div style="clear: both"></div>
<hr>

View File

@ -48,7 +48,7 @@ class DocType:
if not self.doc.kra_template:
msgprint("Please select Appraisal Template to be be fetched")
raise Exception
self.doc.clear_table(self.doclist,'appraisal_details')
self.doclist = self.doc.clear_table(self.doclist,'appraisal_details')
get_obj('DocType Mapper', 'Appraisal Template-Appraisal').dt_map('Appraisal Template', 'Appraisal', self.doc.kra_template, self.doc, self.doclist, "[['Appraisal Template','Appraisal'],['Appraisal Template Goal', 'Appraisal Goal']]")
def validate_dates(self):

View File

@ -113,7 +113,7 @@ class DocType:
# clear table
# ------------
def clear_table(self):
self.doc.clear_table(self.doclist,'holiday_list_details')
self.doclist = self.doc.clear_table(self.doclist,'holiday_list_details')
# ***************************************** validate *************************************************

View File

@ -24,7 +24,7 @@ cur_frm.cscript.onload = function(doc,dt,dn){
// Validation For To Date
// ================================================================================================
cur_frm.cscript.to_date = function(doc, cdt, cdn) {
$c('runserverobj', args={'method':'to_date_validation','docs':compress_doclist([doc])},
$c('runserverobj', args={'method':'to_date_validation','docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r, rt) {
var doc = locals[cdt][cdn];
if (r.message) {

View File

@ -70,8 +70,8 @@ class DocType(TransactionBase):
# Pull struct details
#=======================================================
def pull_sal_struct(self, struct):
self.doc.clear_table(self.doclist, 'earning_details')
self.doc.clear_table(self.doclist, 'deduction_details')
self.doclist = self.doc.clear_table(self.doclist, 'earning_details')
self.doclist = self.doc.clear_table(self.doclist, 'deduction_details')
get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Salary Structure Earning', 'Salary Slip Earning'],['Salary Structure Deduction','Salary Slip Deduction']]")

View File

@ -0,0 +1,11 @@
def execute():
import webnotes
webnotes.conn.sql("""\
delete from `tabDocPerm`
where parent in ('Address', 'Contact')""")
webnotes.conn.commit()
import webnotes.model.sync
webnotes.model.sync.sync('utilities', 'address')
webnotes.model.sync.sync('utilities', 'contact')
webnotes.conn.begin()

View File

@ -0,0 +1,17 @@
def execute():
"""delete entries of child table having parent like old_par%% or ''"""
import webnotes
res = webnotes.conn.sql("""\
select dt.name from `tabDocType` dt
where ifnull(dt.istable, 0)=1 and
exists (
select * from `tabDocField` df
where df.fieldtype='Table' and
df.options=dt.name
)""")
for r in res:
if r[0]:
webnotes.conn.sql("""\
delete from `tab%s`
where (ifnull(parent, '')='' or parent like "old_par%%") and
ifnull(parenttype, '')!=''""" % r[0])

View File

@ -452,6 +452,11 @@ patch_list = [
'patch_file': 'alter_tabsessions',
'description': "alter tabsessions to change user column definition"
},
{
'patch_module': 'patches.june_2012',
'patch_file': 'delete_old_parent_entries',
'description': "delete entries of child table having parent like old_par%% or ''"
},
{
'patch_module': 'patches.april_2012',
'patch_file': 'delete_about_contact',
@ -467,9 +472,14 @@ patch_list = [
'patch_file': 'reload_pr_po_mapper',
'description': "order date should be greater than equal to request date"
},
{
'patch_module': 'patches.july_2012',
'patch_file': 'address_contact_perms',
'description': "sync address contact perms"
},
{
'patch_module': 'patches.july_2012',
'patch_file': 'packing_list_cleanup_and_serial_no',
'description': "packing list cleanup and serial no status update"
},
},
]

View File

@ -322,7 +322,7 @@ class DocType:
def add_to_flat_bom_detail(self, is_submit = 0):
"Add items to Flat BOM table"
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_flat_bom_items:
ch = addchild(self.doc, 'flat_bom_details', 'BOM Explosion Item', 1, self.doclist)
for i in d.keys():

View File

@ -58,13 +58,13 @@ class DocType:
def clear_so_table(self):
""" Clears sales order table"""
self.doc.clear_table(self.doclist, 'pp_so_details')
self.doclist = self.doc.clear_table(self.doclist, 'pp_so_details')
def clear_item_table(self):
""" Clears item table"""
self.doc.clear_table(self.doclist, 'pp_details')
self.doclist = self.doc.clear_table(self.doclist, 'pp_details')

View File

@ -95,5 +95,5 @@ cur_frm.cscript.add = function(doc, dt, dn) {
cur_frm.mylist.run();
}
$c_obj([doc],'add_update','',callback);
$c_obj(make_doclist(doc.doctype, doc.name),'add_update','',callback);
}

View File

@ -81,24 +81,9 @@ cur_frm.cscript.make_address = function() {
},
as_dict: 1,
no_results_message: 'No addresses created',
render_row: function(wrapper, data) {
$(wrapper).css('padding','5px 0px');
var link = $ln(wrapper,cstr(data.name), function() { loaddoc("Address", this.dn); }, {fontWeight:'bold'});
link.dn = data.name
$a(wrapper,'span','',{marginLeft:'5px', color: '#666'},(data.is_primary_address ? '[Primary]' : '') + (data.is_shipping_address ? '[Shipping]' : ''));
$a(wrapper,'div','',{marginTop:'5px', color:'#555'},
(data.address_line1 ? data.address_line1 + '<br />' : '') +
(data.address_line2 ? data.address_line2 + '<br />' : '') +
(data.city ? data.city + '<br />' : '') +
(data.state ? data.state + ', ' : '') +
(data.country ? data.country + '<br />' : '') +
(data.pincode ? 'Pincode: ' + data.pincode + '<br />' : '') +
(data.phone ? 'Phone: ' + data.phone + '<br />' : '') +
(data.fax ? 'Fax: ' + data.fax + '<br />' : '') +
(data.email_id ? 'Email: ' + data.email_id + '<br />' : ''));
}
render_row: cur_frm.cscript.render_address_row,
});
// note: render_address_row is defined in contact_control.js
}
cur_frm.address_list.run();
}
@ -114,15 +99,9 @@ cur_frm.cscript.make_contact = function() {
},
as_dict: 1,
no_results_message: 'No contacts created',
render_row: function(wrapper, data) {
$(wrapper).css('padding', '5px 0px');
var link = $ln(wrapper, cstr(data.name), function() { loaddoc("Contact", this.dn); }, {fontWeight:'bold'});
link.dn = data.name
$a(wrapper,'span','',{marginLeft:'5px', color: '#666'},(data.is_primary_contact ? '[Primary]' : ''));
$a(wrapper,'div', '',{marginTop:'5px', color:'#555'}, data.first_name + (data.last_name ? ' ' + data.last_name + '<br />' : '<br>') + (data.phone ? 'Tel: ' + data.phone + '<br />' : '') + (data.mobile_no ? 'Mobile: ' + data.mobile_no + '<br />' : '') + (data.email_id ? 'Email: ' + data.email_id + '<br />' : '') + (data.department ? 'Department: ' + data.department + '<br />' : '') + (data.designation ? 'Designation: ' + data.designation + '<br />' : ''));
}
render_row: cur_frm.cscript.render_contact_row,
});
// note: render_contact_row is defined in contact_control.js
}
cur_frm.contact_list.run();

View File

@ -87,7 +87,7 @@ cur_frm.cscript.item_code=function(doc,cdt,cdn){
// ===============================================================
cur_frm.cscript['Create Customer'] = function(){
var doc = cur_frm.doc;
$c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist([doc])},
$c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){
if(r.message == 'Converted'){
msgprint("This lead is already converted to customer");
@ -124,7 +124,7 @@ cur_frm.cscript.send_email = function(doc,cdt,cdn){
// ===============================================================
cur_frm.cscript['Create Opportunity'] = function(){
var doc = cur_frm.doc;
$c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist([doc])},
$c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){
if(r.message == 'Converted'){
msgprint("This lead is now converted to customer. Please create enquiry on behalf of customer");

View File

@ -50,10 +50,9 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) {
}
}
cur_frm.cscript.make_communication_body();
}
cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
var callback = function(doc, dt, dn) {
// defined in sales_common.js
cur_frm.cscript.update_item_details(doc, dt, dn);

View File

@ -53,7 +53,7 @@ class DocType(TransactionBase):
# Pull Opportunity Details
# --------------------
def pull_enq_details(self):
self.doc.clear_table(self.doclist, 'quotation_details')
self.doclist = self.doc.clear_table(self.doclist, 'quotation_details')
get_obj('DocType Mapper', 'Opportunity-Quotation').dt_map('Opportunity', 'Quotation', self.doc.enq_no, self.doc, self.doclist, "[['Opportunity', 'Quotation'],['Opportunity Item', 'Quotation Item']]")
self.get_adj_percent()
@ -81,12 +81,19 @@ class DocType(TransactionBase):
obj = get_obj('Sales Common')
for doc in self.doclist:
if doc.fields.get('item_code'):
arg = {'item_code':doc.fields.get('item_code'), 'income_account':doc.fields.get('income_account'),
'cost_center': doc.fields.get('cost_center'), 'warehouse': doc.fields.get('warehouse')};
ret = obj.get_item_defaults(arg)
for r in ret:
if not doc.fields.get(r):
doc.fields[r] = ret[r]
arg = {
'item_code': doc.fields.get('item_code'),
'income_account': doc.fields.get('income_account'),
'cost_center': doc.fields.get('cost_center'),
'warehouse': doc.fields.get('warehouse')
}
fields_dict = obj.get_item_details(arg, self)
if fields_dict:
doc.fields.update(fields_dict)
#ret = obj.get_item_defaults(arg)
#for r in ret:
# if not doc.fields.get(r):
# doc.fields[r] = ret[r]
# Re-calculates Basic Rate & amount based on Price List Selected
@ -108,12 +115,12 @@ class DocType(TransactionBase):
# Load Default Charges
# ----------------------------------------------------------
def load_default_taxes(self):
return get_obj('Sales Common').load_default_taxes(self)
self.doclist = get_obj('Sales Common').load_default_taxes(self)
# Pull details from other charges master (Get Sales Taxes and Charges Master)
# ----------------------------------------------------------
def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self)
self.doclist = get_obj('Sales Common').get_other_charges(self)
# GET TERMS AND CONDITIONS

View File

@ -72,9 +72,11 @@ class DocType(TransactionBase):
# Get Sales Person Details
# ==========================
# TODO: To be deprecated if not in use
def get_sales_person_details(self, obj):
if obj.doc.doctype != 'Quotation':
obj.doc.clear_table(obj.doclist,'sales_team')
obj.doclist = obj.doc.clear_table(obj.doclist,'sales_team')
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):
ch = addchild(obj.doc, 'sales_team', 'Sales Team', 1, obj.doclist)
@ -84,6 +86,7 @@ class DocType(TransactionBase):
ch.incentives = d and flt(d[3]) or 0
ch.idx = idx
idx += 1
return obj.doclist
# Get customer's contact person details
@ -227,15 +230,15 @@ class DocType(TransactionBase):
# ====================
def load_default_taxes(self, obj):
if cstr(obj.doc.charge):
self.get_other_charges(obj)
return self.get_other_charges(obj)
else:
self.get_other_charges(obj, 1)
return self.get_other_charges(obj, 1)
# Get other charges from Master
# =================================================================================
def get_other_charges(self,obj, default=0):
obj.doc.clear_table(obj.doclist,'other_charges')
obj.doclist = obj.doc.clear_table(obj.doclist, 'other_charges')
if not getlist(obj.doclist, 'other_charges'):
if default: add_cond = 'ifnull(t2.is_default,0) = 1'
else: add_cond = 't1.parent = "'+cstr(obj.doc.charge)+'"'
@ -265,6 +268,7 @@ class DocType(TransactionBase):
d.included_in_print_rate = cint(d.included_in_print_rate)
d.idx = idx
idx += 1
return obj.doclist
# Get TERMS AND CONDITIONS
# =======================================================================================
@ -513,12 +517,22 @@ class DocType(TransactionBase):
self.cleanup_packing_list(obj, parent_items)
def cleanup_packing_list(self, obj, parent_items):
"""Remove all those parent items which are no longer present in main item table"""
"""Remove all those child items which are no longer present in main item table"""
delete_list = []
for d in getlist(obj.doclist, 'packing_details'):
if [d.parent_item, d.parent_detail_docname] not in parent_items:
d.parent = ''
d.save()
# mark for deletion from doclist
delete_list.append(d.name)
if not delete_list: return
# delete from doclist
obj.doclist = filter(lambda d: d.name not in delete_list, obj.doclist)
# delete from db
webnotes.conn.sql("""\
delete from `tabDelivery Note Packing Item`
where name in ("%s")""" % '", "'.join(delete_list))
# Get total in words
# ==================================================================

View File

@ -35,8 +35,9 @@ convert_to_lists = webnotes.conn.convert_to_lists
from utilities.transaction_base import TransactionBase
class DocType(TransactionBase):
def __init__(self, doc, doclist=[]):
def __init__(self, doc, doclist=None):
self.doc = doc
if not doclist: doclist = []
self.doclist = doclist
self.tname = 'Sales Order Item'
self.fname = 'sales_order_details'
@ -55,10 +56,10 @@ class DocType(TransactionBase):
# Pull Quotation Items
# -----------------------
def pull_quotation_details(self):
self.doc.clear_table(self.doclist, 'other_charges')
self.doc.clear_table(self.doclist, 'sales_order_details')
self.doc.clear_table(self.doclist, 'sales_team')
self.doc.clear_table(self.doclist, 'tc_details')
self.doclist = self.doc.clear_table(self.doclist, 'other_charges')
self.doclist = self.doc.clear_table(self.doclist, 'sales_order_details')
self.doclist = self.doc.clear_table(self.doclist, 'sales_team')
self.doclist = self.doc.clear_table(self.doclist, 'tc_details')
if self.doc.quotation_no:
get_obj('DocType Mapper', 'Quotation-Sales Order').dt_map('Quotation', 'Sales Order', self.doc.quotation_no, self.doc, self.doclist, "[['Quotation', 'Sales Order'],['Quotation Item', 'Sales Order Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team'],['TC Detail','TC Detail']]")
else:
@ -129,12 +130,12 @@ class DocType(TransactionBase):
# Load Default Charges
# ----------------------------------------------------------
def load_default_taxes(self):
return get_obj('Sales Common').load_default_taxes(self)
self.doclist = get_obj('Sales Common').load_default_taxes(self)
# Pull details from other charges master (Get Sales Taxes and Charges Master)
# ----------------------------------------------------------
def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self)
self.doclist = get_obj('Sales Common').get_other_charges(self)
# GET TERMS & CONDITIONS
@ -316,7 +317,7 @@ class DocType(TransactionBase):
# this is to verify that the allocated % of sales persons is 100%
sales_com_obj.get_allocated_sum(self)
sales_com_obj.make_packing_list(self,'sales_order_details')
# get total in words
dcc = TransactionBase().get_company_currency(self.doc.company)
self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total)

View File

@ -20,6 +20,12 @@
<br>
<h4><a href="#!List/Item">Item</a></h4>
<p class="help">Item Master</p>
<br>
<h4><a href="#!List/Contact">Contact</a></h4>
<p class="help">Contact Master</p>
<br>
<h4><a href="#!List/Address">Address</a></h4>
<p class="help">Address Master</p>
</div>
<div style="clear: both"></div>
<hr>

View File

@ -55,7 +55,7 @@ cur_frm.cscript.make_history_list = function(parent,doc){
// get sates on country trigger
// -----------------------------
cur_frm.cscript.get_states=function(doc,dt,dn){
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist([doc])},
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){
if(r.message) {
set_field_options('state', r.message);
@ -77,3 +77,140 @@ if(cur_frm.fields_dict['territory']){
return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` FROM `tabTerritory` WHERE `tabTerritory`.`is_group` = "No" AND `tabTerritory`.`docstatus`!= 2 AND `tabTerritory`.%(key)s LIKE "%s" ORDER BY `tabTerritory`.`name` ASC LIMIT 50';
}
}
cur_frm.cscript.render_contact_row = function(wrapper, data) {
// prepare data
data.fullname = (data.first_name || '')
+ (data.last_name ? ' ' + data.last_name : '');
data.primary = data.is_primary_contact ? ' [Primary]' : '';
// prepare description
var description = [];
$.each([
['phone', 'Tel'],
['mobile_no', 'Mobile'],
['email_id', 'Email'],
['department', 'Department'],
['designation', 'Designation']],
function(i, v) {
if(v[0] && data[v[0]]) {
description.push(repl('<h6>%(label)s:</h6> %(value)s', {
label: v[1],
value: data[v[0]],
}));
}
});
data.description = description.join('<br />');
cur_frm.cscript.render_row_in_wrapper(wrapper, data, 'Contact');
}
cur_frm.cscript.render_address_row = function(wrapper, data) {
// prepare data
data.fullname = data.address_type;
data.primary = '';
if (data.is_primary_address) data.primary += ' [Primary]';
if (data.is_shipping_address) data.primary += ' [Shipping]';
// prepare address
var address = [];
$.each(['address_line1', 'address_line2', 'city', 'state', 'country', 'pincode'],
function(i, v) {
if(data[v]) address.push(data[v]);
});
data.address = address.join('<br />');
data.address = "<p class='address-list'>" + data.address + "</p>";
// prepare description
var description = [];
$.each([
['address', 'Address'],
['phone', 'Tel'],
['fax', 'Fax'],
['email_id', 'Email']],
function(i, v) {
if(data[v[0]]) {
description.push(repl('<h6>%(label)s:</h6> %(value)s', {
label: v[1],
value: data[v[0]],
}));
}
});
data.description = description.join('<br />');
cur_frm.cscript.render_row_in_wrapper(wrapper, data, 'Address');
$(wrapper).find('p.address-list').css({
'padding-left': '10px',
'margin-bottom': '-10px'
});
}
cur_frm.cscript.render_row_in_wrapper = function(wrapper, data, doctype) {
// render
var $wrapper = $(wrapper);
data.doctype = doctype.toLowerCase();
$wrapper.append(repl("\
<h4><a class='link_type'>%(fullname)s</a>%(primary)s</h4>\
<div class='description'>\
%(description)s\
<p><a class='delete link_type'>delete this %(doctype)s</a></p>\
</div>", data));
// make link
$wrapper.find('h4 a.link_type').click(function() {
loaddoc(doctype, data.name);
});
// css
$wrapper.css({ 'padding': '5px 0px' });
$wrapper.find('div.description').css({
'padding': '5px 2px',
'line-height': '150%',
});
$wrapper.find('h6').css({ 'display': 'inline-block' });
// show delete
var $delete_doc = $wrapper.find('a.delete');
if (wn.model.can_delete(doctype)) {
$delete_doc.toggle(true);
} else {
$delete_doc.toggle(false);
}
$delete_doc.css({
'padding-left': '0px'
});
$delete_doc.click(function() {
cur_frm.cscript.delete_doc(doctype, data.name);
return false;
});
}
cur_frm.cscript.delete_doc = function(doctype, name) {
// confirm deletion
var go_ahead = confirm(repl('Delete %(doctype)s "%(name)s"', {
doctype: doctype,
name: name
}));
if (!go_ahead) return;
wn.call({
method: 'webnotes.model.delete_doc',
args: {
dt: doctype,
dn: name
},
callback: function(r) {
//console.log(r);
if (!r.exc) {
// run the correct list
var list_name = doctype.toLowerCase() + '_list';
cur_frm[list_name].run();
}
}
});
}

View File

@ -19,7 +19,7 @@ cur_frm.cscript.onload = function(doc, cdt, cdn){
var callback = function(r, rt){
set_field_options('select_doc_for_series', r.message);
}
$c_obj([doc],'get_transactions','',callback);
$c_obj(make_doclist(doc.doctype, doc.name),'get_transactions','',callback);
cur_frm.cscript.refresh();
// add page head
//var ph = new PageHeader(cur_frm.fields_dict['head_html'].wrapper, 'Setup Series', 'Set prefix for numbering series on your transactions');
@ -36,5 +36,5 @@ cur_frm.cscript.select_doc_for_series = function(doc, cdt, cdn) {
refresh_field('set_options');
}
$c_obj([doc],'get_options','',callback)
$c_obj(make_doclist(doc.doctype, doc.name),'get_options','',callback)
}

View File

@ -43,10 +43,11 @@ class DocType:
# -----------------------------------------------------
def get_doctype_list(self):
ret = sql("""SELECT `name` FROM tabDocType
WHERE ifnull(docstatus,0)=0
WHERE ifnull(docstatus,0)=0
AND ifnull(istable,0)=0
AND ifnull(issingle,0)=0
AND `module` NOT IN ('System','Utilities','Setup Masters','Roles','Recycle Bin','Mapper','Application Internal','Development', 'Core')
AND (`module` NOT IN ('System','Utilities','Setup Masters','Roles','Recycle Bin','Mapper','Application Internal','Development', 'Core')
OR name IN ('Contact', 'Address'))
ORDER BY `name` ASC""")
rl = [''] + [a[0] for a in sql("select name from tabRole where ifnull(docstatus,0)=0")]

View File

@ -32,6 +32,6 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) {
cur_frm.cscript.clear_prices = function(doc, cdt, cdn) {
if(confirm("This action will clear all rates for '"+ doc.name +"' from the Item Master and cannot be un-done. Are you sure you want to continue?")) {
$c_obj([doc], 'clear_prices', '', function(r, rt) { });
$c_obj(make_doclist(doc.doctype, doc.name), 'clear_prices', '', function(r, rt) { });
}
}

View File

@ -26,7 +26,7 @@ cur_frm.cscript.onload = function(){
}
cur_frm.cscript.country = function(doc, cdt, cdn) {
var mydoc=doc;
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist([doc])},
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){
if(r.message) {
var doc = locals[mydoc.doctype][mydoc.name];

View File

@ -65,7 +65,7 @@ class DocType(TransactionBase):
# *************** Pull Sales Order Items ************************
def pull_sales_order_details(self):
self.validate_prev_docname()
self.doc.clear_table(self.doclist,'other_charges')
self.doclist = self.doc.clear_table(self.doclist,'other_charges')
if self.doc.sales_order_no:
get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Item', 'Delivery Note Item'],['Sales Taxes and Charges','Sales Taxes and Charges'],['Sales Team','Sales Team']]")
@ -146,12 +146,12 @@ class DocType(TransactionBase):
# Load Default Charges
# ----------------------------------------------------------
def load_default_taxes(self):
return get_obj('Sales Common').load_default_taxes(self)
self.doclist = get_obj('Sales Common').load_default_taxes(self)
# **** Pull details from other charges master (Get Sales Taxes and Charges Master) ****
def get_other_charges(self):
return get_obj('Sales Common').get_other_charges(self)
self.doclist = get_obj('Sales Common').get_other_charges(self)
#check in manage account if sales order required or not.

View File

@ -43,7 +43,7 @@ class DocType:
def get_purchase_receipts(self):
""" Get purchase receipts for given period """
self.doc.clear_table(self.doclist,'lc_pr_details',1)
self.doclist = self.doc.clear_table(self.doclist,'lc_pr_details',1)
self.check_mandatory()
pr = sql("select name from `tabPurchase Receipt` where docstatus = 1 and posting_date >= '%s' and posting_date <= '%s' and currency = '%s' order by name " % (self.doc.from_pr_date, self.doc.to_pr_date, self.doc.currency), as_dict = 1)
@ -58,7 +58,7 @@ class DocType:
def get_landed_cost_master_details(self):
""" pull details from landed cost master"""
self.doc.clear_table(self.doclist, 'landed_cost_details')
self.doclist = self.doc.clear_table(self.doclist, 'landed_cost_details')
idx = 0
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:

View File

@ -4,16 +4,27 @@ wn.doclistviews['Purchase Receipt'] = wn.views.ListView.extend({
this._super(d);
this.fields = this.fields.concat([
"`tabPurchase Receipt`.supplier_name",
"`tabPurchase Receipt`.purchase_order_no"
"group_concat(`tabPurchase Receipt Item`.prevdoc_docname) as purchase_order_no",
]);
},
prepare_data: function(data) {
this._super(data);
if(data.purchase_order_no) {
data.purchase_order_no = data.purchase_order_no.split(",");
var po_list = [];
$.each(data.purchase_order_no, function(i, v){
if(po_list.indexOf(v)==-1) po_list.push(v);
});
data.purchase_order_no = po_list.join(", ");
}
},
columns: [
{width: '3%', content: 'check'},
{width: '5%', content:'avatar'},
{width: '3%', content:'docstatus'},
{width: '15%', content:'name'},
{width: '47%', content:'supplier_name+tags', css: {color:'#222'}},
{width: '15%', content:'purchase_order_no', type:'link', doctype:'Purchase Order'},
{width: '32%', content:'supplier_name+tags', css: {color:'#222'}},
{width: '30%', content:'purchase_order_no'},
{width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}}
]
});

View File

@ -370,7 +370,7 @@ class DocType(TransactionBase):
raise Exception
self.add_bom(d)
else:
self.doc.clear_table(self.doclist,'pr_raw_material_details',1)
self.doclist = self.doc.clear_table(self.doclist,'pr_raw_material_details',1)
self.doc.save()
elif item_det[0][1] == 'No':
if not self.doc.supplier_warehouse:
@ -479,4 +479,4 @@ class DocType(TransactionBase):
# **** Pull details from other charges master (Get Other Charges) ****
def get_purchase_tax_details(self):
return get_obj('Purchase Common').get_purchase_tax_details(self)
self.doclist = get_obj('Purchase Common').get_purchase_tax_details(self)

View File

@ -57,7 +57,7 @@ class DocType :
# Create Item Table
# -----------------------------
def create_item_table(self, det):
self.doc.clear_table(self.doclist, 'return_details', 1)
self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1)
for i in det:
ch = addchild(self.doc, 'return_details', 'Sales and Purchase Return Item', 1, self.doclist)
ch.detail_name = i and i[0] or ''
@ -73,5 +73,5 @@ class DocType :
# Clear return table
# --------------------------------
def clear_return_table(self):
self.doc.clear_table(self.doclist, 'return_details', 1)
self.doclist = self.doc.clear_table(self.doclist, 'return_details', 1)
self.doc.save()

View File

@ -240,7 +240,7 @@ class DocType(TransactionBase):
consider_sa_items_as_rm = self.doc.consider_sa_items_as_raw_materials
self.get_raw_materials(bom_no, fg_qty, consider_sa_items_as_rm)
self.doc.clear_table(self.doclist, 'mtn_details', 1)
self.doclist = self.doc.clear_table(self.doclist, 'mtn_details', 1)
sw = (self.doc.process == 'Backflush') and cstr(pro_obj.doc.wip_warehouse) or ''
tw = (self.doc.process == 'Material Transfer') and cstr(pro_obj.doc.wip_warehouse) or ''

View File

@ -16,7 +16,7 @@
cur_frm.cscript.country = function(doc, cdt, cdn) {
var mydoc=doc;
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist([doc])},
$c('runserverobj', args={'method':'check_state', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
function(r,rt){
if(r.message) {
var doc = locals[mydoc.doctype][mydoc.name];

View File

@ -36,7 +36,7 @@ cur_frm.cscript.render_communication_list = function(doc, dt, dn) {
prepare_data: function(data) {
this._super(data);
data.creation = wn.datetime.str_to_user(data.communication_date);
this.prepare_when(data, data.creation);
// escape double quote
data.content = cstr(data.subject).replace(/"/gi, '\"')
@ -54,7 +54,7 @@ cur_frm.cscript.render_communication_list = function(doc, dt, dn) {
{width: '15%', content: 'name'},
{width: '15%', content: 'category'},
{width: '55%', content: 'content'},
{width: '12%', content:'communication_date',
{width: '12%', content:'when',
css: {'text-align': 'right', 'color':'#777'}}
],

View File

@ -13,11 +13,13 @@ wn.doclistviews['Communication'] = wn.views.ListView.extend({
prepare_data: function(data) {
this._super(data);
data.creation = wn.datetime.only_date(data.creation);
this.prepare_when(data, data.creation);
// escape double quote
data.content = cstr(data.subject).replace(/"/gi, '\"')
+ " | " + cstr(data.content).replace(/"/gi, '\"');
data.content = cstr(data.subject)
+ " | " + cstr(data.content);
data.content = data.content.replace(/"/gi, '\"')
.replace(/</gi, '&lt;').replace(/>/gi, '&gt;');
if(data.content && data.content.length > 50) {
data.content = '<span title="'+data.content+'">' +
@ -26,12 +28,12 @@ wn.doclistviews['Communication'] = wn.views.ListView.extend({
},
columns: [
{width: '3%', content: 'check'},
{width: '5%', content: 'avatar'},
{width: '3%', content: 'docstatus'},
{width: '15%', content: 'name'},
{width: '15%', content: 'category'},
{width: '55%', content: 'content+tags'},
{width: '12%', content:'creation',
{width: '12%', content:'when',
css: {'text-align': 'right', 'color':'#777'}}
],
});

View File

@ -42,8 +42,8 @@ class DocType(TransactionBase):
# pull sales order details
#--------------------------
def pull_sales_order_detail(self):
self.doc.clear_table(self.doclist, 'item_maintenance_detail')
self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
self.doclist = self.doc.clear_table(self.doclist, 'item_maintenance_detail')
self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Schedule').dt_map('Sales Order', 'Maintenance Schedule', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Maintenance Schedule'],['Sales Order Item', 'Maintenance Schedule Item']]")
#pull item details
@ -60,7 +60,7 @@ class DocType(TransactionBase):
#-------------------------------------
def generate_schedule(self):
import datetime
self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
self.doclist = self.doc.clear_table(self.doclist, 'maintenance_schedule_detail')
count = 0
sql("delete from `tabMaintenance Schedule Detail` where parent='%s'" %(self.doc.name))
for d in getlist(self.doclist, 'item_maintenance_detail'):

View File

@ -56,7 +56,7 @@ class DocType(TransactionBase):
msgprint("You can not fetch details of both, Sales Order and Customer Issue, in same Maintenance Visit")
raise Exception
self.doc.clear_table(self.doclist, 'maintenance_visit_details')
self.doclist = self.doc.clear_table(self.doclist, 'maintenance_visit_details')
if self.doc.sales_order_no:
self.doclist = get_obj('DocType Mapper', 'Sales Order-Maintenance Visit').dt_map('Sales Order', \
@ -160,4 +160,4 @@ class DocType(TransactionBase):
set(self.doc, 'status', 'Cancelled')
def on_update(self):
pass
pass

View File

@ -31,9 +31,12 @@ wn.doclistviews['Support Ticket'] = wn.views.ListView.extend({
data.status_html = repl('<span class="label label-%(label_type)s">%(status)s</span>', data);
// escape double quotes
data.description = cstr(data.subject).replace(/"/gi, '\"')
+ " | " + cstr(data.description).replace(/"/gi, '\"');
data.description = cstr(data.subject)
+ " | " + cstr(data.description);
data.description = data.description.replace(/"/gi, '\"')
.replace(/</gi, '&lt;').replace(/>/gi, '&gt;');
// description
if(data.description && data.description.length > 50) {
data.description = '<span title="'+data.description+'">' + data.description.substr(0,50) + '...</span>';

View File

@ -99,7 +99,7 @@ $.extend(cur_frm.cscript, {
},
send: function(doc, dt, dn) {
$c_obj([doc], 'send_response', '', function(r,rt) {
$c_obj(make_doclist(doc.doctype, doc.name), 'send_response', '', function(r,rt) {
locals[dt][dn].new_response = '';
if(!(r.exc || r.server_messages)) {
cur_frm.refresh();
@ -124,7 +124,7 @@ $.extend(cur_frm.cscript, {
var answer = confirm("Close Ticket "+doc.name+"?\n\nAllocated To: "+doc.allocated_to+"\n\nSubject: "+doc.subject+"");
if(answer) {
if(doc.name)
$c_obj([doc],'close_ticket','',function(r,rt) {
$c_obj(make_doclist(doc.doctype, doc.name),'close_ticket','',function(r,rt) {
if(!r.exc) {
cur_frm.refresh();
}
@ -138,7 +138,7 @@ $.extend(cur_frm.cscript, {
var answer = confirm("Re-Open Ticket "+doc.name+"?\n\nAllocated To: "+doc.allocated_to+"\n\nSubject: "+doc.subject+"");
if(answer) {
if(doc.name)
$c_obj([doc],'reopen_ticket','',function(r,rt) {
$c_obj(make_doclist(doc.doctype, doc.name),'reopen_ticket','',function(r,rt) {
if(!r.exc) {
cur_frm.refresh();
}

View File

@ -21,7 +21,6 @@ from webnotes.model.doc import Document
from webnotes import session, form, msgprint, errprint
# -----------------------------------------------------------------------------------------
class DocType:
def __init__(self, doc, doclist=[]):
self.doc = doc

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2012-03-27 14:36:45',
'creation': '2012-07-02 19:57:47',
'docstatus': 0,
'modified': '2012-03-27 14:36:45',
'modified': '2012-07-02 20:24:15',
'modified_by': u'Administrator',
'owner': u'Administrator'
},
@ -24,7 +24,7 @@
'search_fields': u'customer, supplier, sales_partner, country, state',
'section_style': u'Simple',
'show_in_menu': 0,
'version': 43
'version': 1
},
# These values are common for all DocField
@ -38,17 +38,12 @@
# These values are common for all DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'name': '__common__',
'parent': u'Address',
'parentfield': u'permissions',
'parenttype': u'DocType',
'permlevel': 0,
'read': 1,
'role': u'All',
'write': 1
'read': 1
},
# DocType, Address
@ -59,7 +54,116 @@
# DocPerm
{
'doctype': u'DocPerm'
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'System Manager',
'write': 1
},
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Sales Master Manager',
'write': 1
},
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Purchase Master Manager',
'write': 1
},
# DocPerm
{
'cancel': 0,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Maintenance Manager',
'write': 1
},
# DocPerm
{
'cancel': 0,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Accounts Manager',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Sales Manager',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Purchase Manager',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Sales User',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Purchase User',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Maintenance User',
'write': 1
},
# DocPerm
{
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'Accounts User',
'write': 1
},
# DocPerm
{
'cancel': 0,
'create': 0,
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'All',
'write': 0
},
# DocField

View File

@ -0,0 +1,55 @@
wn.doclistviews['Address'] = wn.views.ListView.extend({
init: function(d) {
this._super(d)
this.fields = this.fields.concat([
"`tabAddress`.customer_name",
"`tabAddress`.supplier",
"`tabAddress`.supplier_name",
"`tabAddress`.sales_partner",
"`tabAddress`.city",
"`tabAddress`.country",
"ifnull(`tabAddress`.is_shipping_address, 0) as is_shipping_address",
]);
},
prepare_data: function(data) {
this._super(data);
// prepare address
var address = []
$.each(['city', 'country'], function(i, v) {
if(data[v]) address.push(data[v]);
});
data.address = address.join(", ");
// prepare shipping tag
if(data.is_shipping_address) {
data.shipping = '<span class="label label-info">Shipping</span>';
}
// prepare description
if(data.customer) {
data.description = (data.customer_name || data.customer);
data.contact_type = 'Customer';
} else if (data.supplier) {
data.description = (data.supplier_name || data.supplier);
data.contact_type = 'Supplier';
} else if (data.sales_partner) {
data.description = data.sales_partner;
data.contact_type = 'Sales Partner'
} else {
data.description = '';
data.contact_type = '';
}
},
columns: [
{width: '3%', content: 'check'},
{width: '20%', content: 'name'},
{width: '15%', content: 'contact_type'},
{width: '20%', content: 'description'},
{width: '30%', content: 'address+shipping+tags', css: {'padding': '2px 0px'}},
{width: '12%', content: 'modified', css: {'text-align': 'right', 'color':'#777'}}
]
});

View File

@ -21,7 +21,6 @@ from webnotes.model.doc import Document
from webnotes import session, form, msgprint, errprint
# -----------------------------------------------------------------------------------------
class DocType:
def __init__(self, doc, doclist=[]):
self.doc = doc

View File

@ -3,9 +3,9 @@
# These values are common in all dictionaries
{
'creation': '2012-03-27 14:36:46',
'creation': '2012-07-02 19:57:48',
'docstatus': 0,
'modified': '2012-03-27 14:36:46',
'modified': '2012-07-02 20:24:17',
'modified_by': u'Administrator',
'owner': u'Administrator'
},
@ -26,7 +26,7 @@
'server_code_error': u' ',
'show_in_menu': 0,
'subject': u'%(first_name)s %(last_name)s - Email: %(email_id)s | Contact: %(phone)s | Mobile: %(mobile_no)s',
'version': 245
'version': 1
},
# These values are common for all DocField
@ -54,6 +54,16 @@
'name': u'Contact'
},
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'System Manager',
'write': 1
},
# DocPerm
{
'amend': 0,
@ -66,21 +76,6 @@
'write': 1
},
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'All',
'write': 1
},
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 2,
'role': u'All'
},
# DocPerm
{
'cancel': 1,
@ -91,16 +86,6 @@
'write': 1
},
# DocPerm
{
'cancel': 1,
'create': 1,
'doctype': u'DocPerm',
'permlevel': 0,
'role': u'System Manager',
'write': 1
},
# DocPerm
{
'doctype': u'DocPerm',
@ -115,6 +100,13 @@
'role': u'Purchase User'
},
# DocPerm
{
'doctype': u'DocPerm',
'permlevel': 1,
'role': u'All'
},
# DocField
{
'colour': u'White:FFF',

View File

@ -0,0 +1,50 @@
wn.doclistviews['Contact'] = wn.views.ListView.extend({
init: function(d) {
this._super(d)
this.fields = this.fields.concat([
"`tabContact`.first_name",
"`tabContact`.last_name",
"`tabContact`.customer",
"`tabContact`.customer_name",
"`tabContact`.supplier",
"`tabContact`.supplier_name",
"`tabContact`.sales_partner",
"`tabContact`.email_id",
]);
},
prepare_data: function(data) {
this._super(data);
// prepare fullname
data.fullname = (data.first_name || '') +
(data.last_name ? ' ' + data.last_name : '');
if(!data.fullname) data.fullname = data.name;
data.fullname = repl("<a href='#!Form/Contact/%(name)s'>%(fullname)s\
</a>", data);
// prepare description
if(data.customer) {
data.description = (data.customer_name || data.customer);
data.contact_type = 'Customer';
} else if (data.supplier) {
data.description = (data.supplier_name || data.supplier);
data.contact_type = 'Supplier';
} else if (data.sales_partner) {
data.description = data.sales_partner;
data.contact_type = 'Sales Partner'
} else {
data.description = '';
data.contact_type = '';
}
},
columns: [
{width: '3%', content: 'check'},
{width: '20%', content: 'fullname'},
{width: '15%', content: 'contact_type'},
{width: '20%', content: 'description+tags'},
{width: '30%', content: 'email_id'},
{width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}}
]
});

View File

@ -81,6 +81,10 @@ def update_security(args=''):
webnotes.conn.set_value('Profile', args['user'], 'login_after', args.get('login_after') or None)
webnotes.conn.set_value('Profile', args['user'], 'login_before', args.get('login_before') or None)
webnotes.conn.set_value('Profile', args['user'], 'enabled', int(args.get('enabled',0)) or 0)
# logout a disabled user
if not int(args.get('enabled',0) or 0):
webnotes.login_manager.logout(user=args['user'])
if args.get('new_password') and args.get('sys_admin_pwd'):
from webnotes.utils import cint

View File

@ -214,7 +214,7 @@ class TransactionBase:
# Get Sales Person Details of Customer
# ------------------------------------
def get_sales_person(self, name):
self.doc.clear_table(self.doclist,'sales_team')
self.doclist = self.doc.clear_table(self.doclist,'sales_team')
idx = 0
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)

View File

@ -396,7 +396,7 @@ wn.request.cleanup=function(opts,r){if(opts.btn)$(opts.btn).done_working();if(op
return;}
if(r.server_messages)msgprint(r.server_messages)
if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');}
if(r.docs)LocalDB.sync(r.docs);}
if(r.docs){LocalDB.sync(r.docs);}}
wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
if(opts.error)opts.error(xhr)}})}
wn.call=function(opts){var args=$.extend({},opts.args)
@ -735,19 +735,20 @@ return v;};function LinkField(){}LinkField.prototype=new Field();LinkField.proto
$(me.btn2).css('display','inline-block');else $dh(me.btn2);}}
me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;}
me.get_value=function(){return me.txt.value;}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){if(!$(this).val()){if(selector&&selector.display)
return;me.set_input_value('');}})}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){var val=$(this).val();me.set_input_value_executed=false;if(!val){if(selector&&selector.display)
return;me.set_input_value('');}else{setTimeout(function(){if(!me.set_input_value_executed){me.set_input_value(val);}},100);}})}
LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm)
var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}}
LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);}
if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}}
me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}}
_f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}}
LinkField.prototype.set_input_value=function(val){var me=this;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
LinkField.prototype.set_input_value=function(val){var me=this;me.set_input_value_executed=true;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}}
me.set(val);if(_f.cur_grid_cell)
_f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;}
var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
me.validate_link(val,from_selector);}
LinkField.prototype.validate_link=function(val,from_selector){var me=this;var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}}
if(r.fetch_values)
me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)})
@ -967,13 +968,13 @@ wn.views.DocListView=wn.ui.Listing.extend({init:function(doctype){this.doctype=d
<div style="clear: both"></div>\
</div>');this.appframe=new wn.ui.AppFrame(this.$page.find('.appframe-area'));wn.views.breadcrumbs($('<span class="breadcrumb-area">').appendTo(this.appframe.$titlebar),locals.DocType[this.doctype].module,this.doctype);},setup:function(){var me=this;me.can_delete=wn.model.can_delete(me.doctype);me.meta=locals.DocType[me.doctype];me.$page.find('.wnlist-area').empty(),me.setup_docstatus_filter();me.setup_listview();me.init_list();me.init_stats();me.make_report_button();me.add_delete_option();},make_report_button:function(){var me=this;if(wn.boot.profile.can_get_report.indexOf(this.doctype)!=-1){this.appframe.add_button('Build Report',function(){wn.set_route('Report2',me.doctype);},'icon-th')}},setup_docstatus_filter:function(){var me=this;this.can_submit=$.map(locals.DocPerm,function(d){if(d.parent==me.meta.name&&d.submit)return 1
else return null;}).length;if(this.can_submit){this.$page.find('.show-docstatus').removeClass('hide');this.$page.find('.show-docstatus input').click(function(){me.run();})}},setup_listview:function(){if(this.meta.__listjs){eval(this.meta.__listjs);this.listview=new wn.doclistviews[this.doctype](this);}else{this.listview=new wn.views.ListView(this);}
this.listview.parent=this;this.wrapper=this.$page.find('.wnlist-area');this.page_length=20;this.allow_delete=true;},init_list:function(auto_run){this.make({method:'webnotes.widgets.doclistview.get',get_args:this.get_args,parent:this.wrapper,start:0,page_length:this.page_length,show_filters:true,show_grid:true,new_doctype:this.doctype,allow_delete:this.allow_delete,no_result_message:this.make_no_result(),columns:this.listview.fields});if((auto_run!==false)&&(auto_run!==0))this.run();},make_no_result:function(){return repl('<div class="well"><p>No %(doctype_label)s found</p>\
this.listview.parent=this;this.wrapper=this.$page.find('.wnlist-area');this.page_length=20;this.allow_delete=true;},init_list:function(auto_run){var me=this;this.make({method:'webnotes.widgets.doclistview.get',get_args:this.get_args,parent:this.wrapper,start:0,page_length:this.page_length,show_filters:true,show_grid:true,new_doctype:this.doctype,allow_delete:this.allow_delete,no_result_message:this.make_no_result(),columns:this.listview.fields});$(this.wrapper).find('button[list_view_doc="'+me.doctype+'"]').click(function(){me.make_new_doc(me.doctype);});if((auto_run!==false)&&(auto_run!==0))this.run();},make_no_result:function(){var no_result_message=repl('<div class="well">\
<p>No %(doctype_label)s found</p>\
%(description)s\
<hr>\
<p><button class="btn btn-info btn-small"\
onclick="newdoc(\'%(doctype)s\');"\
>Make a new %(doctype_label)s</button>\
</p></div>',{doctype_label:get_doctype_label(this.doctype),doctype:this.doctype,description:wn.markdown(locals.DocType[this.doctype].description||'')});},render_row:function(row,data){data.doctype=this.doctype;this.listview.render(row,data,this);},get_query_fields:function(){return this.listview.fields;},get_args:function(){return{doctype:this.doctype,fields:this.get_query_fields(),filters:this.filter_list.get_filters(),docstatus:this.can_submit?$.map(this.$page.find('.show-docstatus :checked'),function(inp){return $(inp).attr('data-docstatus')}):[],order_by:this.listview.order_by||undefined,}},add_delete_option:function(){var me=this;if(this.can_delete){this.add_button('Delete',function(){me.delete_items();},'icon-remove')}},delete_items:function(){var me=this;var dl=$.map(me.$page.find('.list-delete:checked'),function(e){return $(e).data('name');});if(!dl.length)
<p><button class="btn btn-info btn-small" list_view_doc="%(doctype)s">\
Make a new %(doctype_label)s</button>\
</p></div>',{doctype_label:get_doctype_label(this.doctype),doctype:this.doctype,description:wn.markdown(locals.DocType[this.doctype].description||''),});return no_result_message;},render_row:function(row,data){data.doctype=this.doctype;this.listview.render(row,data,this);},get_query_fields:function(){return this.listview.fields;},get_args:function(){return{doctype:this.doctype,fields:this.get_query_fields(),filters:this.filter_list.get_filters(),docstatus:this.can_submit?$.map(this.$page.find('.show-docstatus :checked'),function(inp){return $(inp).attr('data-docstatus')}):[],order_by:this.listview.order_by||undefined,}},add_delete_option:function(){var me=this;if(this.can_delete){this.add_button('Delete',function(){me.delete_items();},'icon-remove')}},delete_items:function(){var me=this;var dl=$.map(me.$page.find('.list-delete:checked'),function(e){return $(e).data('name');});if(!dl.length)
return;if(!confirm('This is PERMANENT action and you cannot undo. Continue?')){return;}
me.set_working(true);wn.call({method:'webnotes.widgets.doclistview.delete_items',args:{items:dl,doctype:me.doctype},callback:function(){me.set_working(false);me.refresh();}})},init_stats:function(){var me=this
wn.call({method:'webnotes.widgets.doclistview.get_stats',args:{stats:me.listview.stats,doctype:me.doctype},callback:function(r){$.each(me.listview.stats,function(i,v){me.render_stat(v,r.message[v]);});if(me.listview.stats.length){$('<button class="btn btn-small"><i class="refresh"></i> Refresh</button>').click(function(){me.reload_stats();}).appendTo($('<div class="stat-wrapper">').appendTo(me.$page.find('.layout-side-section')))}}});},render_stat:function(field,stat){var me=this;if(!stat||!stat.length){if(field=='_user_tags'){this.$page.find('.layout-side-section').append('<div class="stat-wrapper"><h4>Tags</h4>\
@ -1014,11 +1015,10 @@ $(parent).append(repl('<span class="bar-outer" style="width: 30px; float: right"
else if(opts.type=='link'&&opts.doctype){$(parent).append(repl('<a href="#!Form/'+opts.doctype+'/'
+data[opts.content]+'">'+data[opts.content]+'</a>',data));}
else if(opts.template){$(parent).append(repl(opts.template,data));}
else if(data[opts.content]){$(parent).append(' '+data[opts.content]);}},render:function(row,data){var me=this;this.prepare_data(data);rowhtml='';$.each(this.columns,function(i,v){rowhtml+=repl('<td style="width: %(width)s"></td>',v);});var tr=$(row).html('<table><tbody><tr>'+rowhtml+'</tr></tbody></table>').find('tr').get(0);$.each(this.columns,function(i,v){me.render_column(data,tr.cells[i],v);});},prepare_data:function(data){data.fullname=wn.user_info(data.owner).fullname;data.avatar=wn.user_info(data.owner).image;data.when=dateutil.str_to_user(data.modified).split(' ')[0];var diff=dateutil.get_diff(dateutil.get_today(),data.modified.split(' ')[0]);if(diff==0){data.when=dateutil.comment_when(data.modified);}
else if(data[opts.content]){$(parent).append(' '+data[opts.content]);}},render:function(row,data){var me=this;this.prepare_data(data);rowhtml='';$.each(this.columns,function(i,v){rowhtml+=repl('<td style="width: %(width)s"></td>',v);});var tr=$(row).html('<table><tbody><tr>'+rowhtml+'</tr></tbody></table>').find('tr').get(0);$.each(this.columns,function(i,v){me.render_column(data,tr.cells[i],v);});},prepare_data:function(data){data.fullname=wn.user_info(data.owner).fullname;data.avatar=wn.user_info(data.owner).image;this.prepare_when(data,data.modified);if(data.docstatus==0||data.docstatus==null){data.docstatus_icon='icon-pencil';data.docstatus_title='Editable';}else if(data.docstatus==1){data.docstatus_icon='icon-lock';data.docstatus_title='Submitted';}else if(data.docstatus==2){data.docstatus_icon='icon-remove';data.docstatus_title='Cancelled';}
for(key in data){if(data[key]==null){data[key]='';}}},prepare_when:function(data,date_str){if(!date_str)date_str=data.modified;data.when=dateutil.str_to_user(date_str).split(' ')[0];var diff=dateutil.get_diff(dateutil.get_today(),date_str.split(' ')[0]);if(diff==0){data.when=dateutil.comment_when(date_str);}
if(diff==1){data.when='Yesterday'}
if(diff==2){data.when='2 days ago'}
if(data.docstatus==0||data.docstatus==null){data.docstatus_icon='icon-pencil';data.docstatus_title='Editable';}else if(data.docstatus==1){data.docstatus_icon='icon-lock';data.docstatus_title='Submitted';}else if(data.docstatus==2){data.docstatus_icon='icon-remove';data.docstatus_title='Cancelled';}
for(key in data){if(data[key]==null){data[key]='';}}},add_user_tags:function(parent,data){var me=this;if(data._user_tags){if($(parent).html().length>0){$(parent).append('<br />');}
if(diff==2){data.when='2 days ago'}},add_user_tags:function(parent,data){var me=this;if(data._user_tags){if($(parent).html().length>0){$(parent).append('<br />');}
$.each(data._user_tags.split(','),function(i,t){if(t){$('<span class="label label-info" style="cursor: pointer; line-height: 200%">'
+strip(t)+'</span>').click(function(){me.doclistview.set_filter('_user_tags',$(this).text())}).appendTo(parent);}});}},show_hide_check_column:function(){if(!this.doclistview.can_delete){this.columns=$.map(this.columns,function(v,i){if(v.content!='check')return v});}}});wn.provide('wn.views.RecordListView');wn.views.RecordListView=wn.views.DocListView.extend({init:function(doctype,wrapper,ListView){this.doctype=doctype;this.wrapper=wrapper;this.listview=new ListView(this);this.listview.parent=this;this.setup();},setup:function(){var me=this;me.page_length=10;$(me.wrapper).empty();me.init_list();},get_args:function(){var args=this._super();$.each((this.default_filters||[]),function(i,f){args.filters.push(f);});args.docstatus=args.docstatus.concat((this.default_docstatus||[]));return args;},});
/*
@ -1032,7 +1032,7 @@ wn.container.change_to('Form - '+dt);wn.views.formview[dt].frm.refresh(dn);});})
* lib/js/wn/views/reportview.js
*/
wn.views.reportview={show:function(dt,rep_name){wn.require('js/report-legacy.js');dt=get_label_doctype(dt);if(!_r.rb_con){_r.rb_con=new _r.ReportContainer();}
_r.rb_con.set_dt(dt,function(rb){if(rep_name){var t=rb.current_loaded;var route_changed=(rb.current_route!=wn.get_route_str())
_r.rb_con.set_dt(dt,function(rb){if(rep_name){var route_changed=(rb.current_route!=wn.get_route_str())
rb.load_criteria(rep_name);if(rb.dt&&route_changed){rb.dt.run();}}
if(!rb.forbidden){wn.container.change_to('Report Builder');}});}}
wn.views.reportview2={show:function(dt){var page_name=wn.get_route_str();if(wn.pages[page_name]){wn.container.change_to(wn.pages[page_name]);}else{var route=wn.get_route();if(route[1]){new wn.views.ReportViewPage(route[1],route[2]);}else{wn.set_route('404');}}}}
@ -1313,8 +1313,10 @@ LocalDB.add=function(dt,dn){if(!locals[dt])locals[dt]={};if(locals[dt][dn])delet
LocalDB.delete_doc=function(dt,dn){var doc=get_local(dt,dn);for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||doc.__oldparent==dn)){delete locals[ndt][ndn];}}}}
delete locals[dt][dn];}
function get_local(dt,dn){return locals[dt]?locals[dt][dn]:null;}
LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);for(var i=0;i<list.length;i++){var d=list[i];if(!d.name)
LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);if(list){LocalDB.clear_locals(list[0].doctype,list[0].name);}
for(var i=0;i<list.length;i++){var d=list[i];if(!d.name)
d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}}
LocalDB.clear_locals=function(dt,dn){var doclist=make_doclist(dt,dn,1);$.each(doclist,function(i,v){v&&delete locals[v.doctype][v.name];});}
local_name_idx={};LocalDB.get_localname=function(doctype){if(!local_name_idx[doctype])local_name_idx[doctype]=1;var n='New '+get_doctype_label(doctype)+' '+local_name_idx[doctype];local_name_idx[doctype]++;return n;}
LocalDB.set_default_values=function(doc){var doctype=doc.doctype;var docfields=wn.meta.docfield_list[doctype];if(!docfields){return;}
var fields_to_refresh=[];for(var fid=0;fid<docfields.length;fid++){var f=docfields[fid];if(!in_list(no_value_fields,f.fieldtype)&&doc[f.fieldname]==null){var v=LocalDB.get_default_value(f.fieldname,f.fieldtype,f['default']);if(v){doc[f.fieldname]=v;fields_to_refresh.push(f.fieldname);}}}
@ -1344,7 +1346,8 @@ return sys_defaults[fn];}
LocalDB.add_child=function(doc,childtype,parentfield){var n=LocalDB.create(childtype);var d=locals[childtype][n];d.parent=doc.name;d.parentfield=parentfield;d.parenttype=doc.doctype;return d;}
LocalDB.no_copy_list=['amended_from','amendment_date','cancel_reason'];LocalDB.copy=function(dt,dn,from_amend){var newdoc=LocalDB.create(dt);for(var key in locals[dt][dn]){var df=get_field(dt,key);if(key!=='name'&&key.substr(0,2)!='__'&&!(df&&((!from_amend&&cint(df.no_copy)==1)||in_list(LocalDB.no_copy_list,df.fieldname)))){locals[dt][newdoc][key]=locals[dt][dn][key];}}
return locals[dt][newdoc];}
function make_doclist(dt,dn,deleted){var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}}
function make_doclist(dt,dn,deleted){if(!locals[dt]){return[];}
var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}}
return dl;}
var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_doclist('DocType',dt);if(!local_dt[dt])local_dt[dt]={};if(!local_dt[dt][dn])local_dt[dt][dn]={};for(var i=0;i<dl.length;i++){var d=dl[i];if(d.doctype=='DocField'){var key=d.fieldname?d.fieldname:d.label;local_dt[dt][dn][key]=copy_dict(d);}}}
Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(wn.meta.docfield_map[dt])var d=wn.meta.docfield_map[dt][fn];if(d)return d;}
@ -1559,19 +1562,20 @@ return v;};function LinkField(){}LinkField.prototype=new Field();LinkField.proto
$(me.btn2).css('display','inline-block');else $dh(me.btn2);}}
me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;}
me.get_value=function(){return me.txt.value;}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){if(!$(this).val()){if(selector&&selector.display)
return;me.set_input_value('');}})}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){var val=$(this).val();me.set_input_value_executed=false;if(!val){if(selector&&selector.display)
return;me.set_input_value('');}else{setTimeout(function(){if(!me.set_input_value_executed){me.set_input_value(val);}},100);}})}
LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm)
var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}}
LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);}
if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}}
me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}}
_f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}}
LinkField.prototype.set_input_value=function(val){var me=this;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
LinkField.prototype.set_input_value=function(val){var me=this;me.set_input_value_executed=true;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}}
me.set(val);if(_f.cur_grid_cell)
_f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;}
var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
me.validate_link(val,from_selector);}
LinkField.prototype.validate_link=function(val,from_selector){var me=this;var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}}
if(r.fetch_values)
me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)})
@ -1831,7 +1835,7 @@ _f.Frm.prototype.savedoc=function(save_action,onsave,onerr){this.error_in_sectio
_f.Frm.prototype.saveupdate=function(){this.save('Update');}
_f.Frm.prototype.savesubmit=function(){var answer=confirm("Permanently Submit "+this.docname+"?");var me=this;if(answer){this.save('Submit',function(r){if(!r.exc&&me.cscript.on_submit){me.runclientscript('on_submit',me.doctype,me.docname);}});}}
_f.Frm.prototype.savecancel=function(){var answer=confirm("Permanently Cancel "+this.docname+"?");if(answer)this.save('Cancel');}
_f.Frm.prototype.savetrash=function(){var me=this;var answer=confirm("Permanently Delete "+this.docname+"? This action cannot be reversed");if(answer){$c('webnotes.model.delete_doc',{dt:this.doctype,dn:this.docname},function(r,rt){if(r.message=='okay'){LocalDB.delete_doc(me.doctype,me.docname);if(wn.ui.toolbar.recent)wn.ui.toolbar.recent.remove(me.doctype,me.docname);window.back();}})}}
_f.Frm.prototype.savetrash=function(){var me=this;var answer=confirm("Permanently Delete "+this.docname+"? This action cannot be reversed");if(answer){$c('webnotes.model.delete_doc',{dt:this.doctype,dn:this.docname},function(r,rt){if(r.message=='okay'){LocalDB.delete_doc(me.doctype,me.docname);if(wn.ui.toolbar.recent)wn.ui.toolbar.recent.remove(me.doctype,me.docname);window.history.back();}})}}
_f.Frm.prototype.amend_doc=function(){if(!this.fields_dict['amended_from']){alert('"amended_from" field must be present to do an amendment.');return;}
var me=this;var fn=function(newdoc){newdoc.amended_from=me.docname;if(me.fields_dict&&me.fields_dict['amendment_date'])
newdoc.amendment_date=dateutil.obj_to_str(new Date());}
@ -2114,7 +2118,7 @@ $c_get_values=function(args,doc,dt,dn,user_callback){var call_back=function(r,rt
refresh_field(fl[i],dn,args.table_field);else
refresh_field(fl[i]);}}
$c('webnotes.widgets.form.utils.get_fields',args,call_back);}
get_server_fields=function(method,arg,table_field,doc,dt,dn,allow_edit,call_back){if(!allow_edit)freeze('Fetching Data...');$c('runserverobj',args={'method':method,'docs':compress_doclist([doc]),'arg':arg},function(r,rt){if(r.message){var d=locals[dt][dn];var field_dict=r.message;for(var key in field_dict){d[key]=field_dict[key];if(table_field)refresh_field(key,d.name,table_field);else refresh_field(key);}}
get_server_fields=function(method,arg,table_field,doc,dt,dn,allow_edit,call_back){if(!allow_edit)freeze('Fetching Data...');$c('runserverobj',args={'method':method,'docs':compress_doclist(make_doclist(doc.doctype,doc.name)),'arg':arg},function(r,rt){if(r.message){var d=locals[dt][dn];var field_dict=r.message;for(var key in field_dict){d[key]=field_dict[key];if(table_field)refresh_field(key,d.name,table_field);else refresh_field(key);}}
if(call_back){doc=locals[doc.doctype][doc.name];call_back(doc,dt,dn);}
if(!allow_edit)unfreeze();});}
set_multiple=function(dt,dn,dict,table_field){var d=locals[dt][dn];for(var key in dict){d[key]=dict[key];if(table_field)refresh_field(key,d.name,table_field);else refresh_field(key);}}
@ -2165,7 +2169,7 @@ CommentItem.prototype.cmt_delete=function(cell,ri,ci,d){var me=this;if(d[ri][2]=
/*
* lib/js/legacy/wn/widgets/form/sidebar.js
*/
wn.widgets.form.sidebar={Sidebar:function(form){var me=this;this.form=form;this.opts={sections:[{title:'Actions',items:[{type:'link',label:'New',icon:'icon-plus',display:function(){return in_list(profile.can_create,form.doctype)},onclick:function(){new_doc(me.form.doctype)}},{type:'link',label:'List',icon:'icon-list',display:function(){return!me.form.meta.issingle;},onclick:function(){window.location.href="#!List/"+me.form.doctype}},{type:'link',label:'Refresh',icon:'icon-refresh',onclick:function(){me.form.reload_doc()}},{type:'link',label:'Print',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_print);},icon:'icon-print',onclick:function(){me.form.print_doc()}},{type:'link',label:'Email',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_email);},icon:'icon-envelope',onclick:function(){me.form.email_doc()}},{type:'link',label:'Copy',display:function(){return in_list(profile.can_create,me.form.doctype)&&!me.form.meta.allow_copy},icon:'icon-file',onclick:function(){me.form.copy_doc()}},{type:'link',label:'Delete',display:function(){return me.form.meta.allow_trash&&cint(me.form.doc.docstatus)!=2&&(!me.form.doc.__islocal)&&me.form.perm[0][CANCEL]},icon:'icon-remove-sign',onclick:function(){me.form.savetrash()}}]},{title:'Assign To',render:function(wrapper){me.form.assign_to=new wn.widgets.form.sidebar.AssignTo(wrapper,me,me.form.doctype,me.form.docname);},display:function(){if(me.form.doc.__local)return false;else return true;}},{title:'Attachments',render:function(wrapper){me.form.attachments=new wn.widgets.form.sidebar.Attachments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return me.form.meta.allow_attach}},{title:'Comments',render:function(wrapper){new wn.widgets.form.sidebar.Comments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return!me.form.doc.__islocal}},{title:'Tags',render:function(wrapper){me.form.taglist=new TagList(wrapper,me.form.doc._user_tags?me.form.doc._user_tags.split(','):[],me.form.doctype,me.form.docname,0,function(){});},display:function(){return!me.form.doc.__islocal}},{title:'Users',render:function(wrapper){var doc=cur_frm.doc;var scrub_date=function(d){if(d)t=d.split(' ');else return'';return dateutil.str_to_user(t[0])+' '+t[1];}
wn.widgets.form.sidebar={Sidebar:function(form){var me=this;this.form=form;this.opts={sections:[{title:'Actions',items:[{type:'link',label:'New',icon:'icon-plus',display:function(){return in_list(profile.can_create,form.doctype)},onclick:function(){new_doc(me.form.doctype)}},{type:'link',label:'List',icon:'icon-list',display:function(){return!me.form.meta.issingle;},onclick:function(){window.location.href="#!List/"+me.form.doctype}},{type:'link',label:'Refresh',icon:'icon-refresh',onclick:function(){me.form.reload_doc()}},{type:'link',label:'Print',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_print);},icon:'icon-print',onclick:function(){me.form.print_doc()}},{type:'link',label:'Email',display:function(){return!(me.form.doc.__islocal||me.form.meta.allow_email);},icon:'icon-envelope',onclick:function(){me.form.email_doc()}},{type:'link',label:'Copy',display:function(){return in_list(profile.can_create,me.form.doctype)&&!me.form.meta.allow_copy},icon:'icon-file',onclick:function(){me.form.copy_doc()}},{type:'link',label:'Delete',display:function(){return(cint(me.form.doc.docstatus)!=1)&&!me.form.doc.__islocal&&wn.model.can_delete(me.form.doctype);},icon:'icon-remove-sign',onclick:function(){me.form.savetrash()}}]},{title:'Assign To',render:function(wrapper){me.form.assign_to=new wn.widgets.form.sidebar.AssignTo(wrapper,me,me.form.doctype,me.form.docname);},display:function(){if(me.form.doc.__local)return false;else return true;}},{title:'Attachments',render:function(wrapper){me.form.attachments=new wn.widgets.form.sidebar.Attachments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return me.form.meta.allow_attach}},{title:'Comments',render:function(wrapper){new wn.widgets.form.sidebar.Comments(wrapper,me,me.form.doctype,me.form.docname);},display:function(){return!me.form.doc.__islocal}},{title:'Tags',render:function(wrapper){me.form.taglist=new TagList(wrapper,me.form.doc._user_tags?me.form.doc._user_tags.split(','):[],me.form.doctype,me.form.docname,0,function(){});},display:function(){return!me.form.doc.__islocal}},{title:'Users',render:function(wrapper){var doc=cur_frm.doc;var scrub_date=function(d){if(d)t=d.split(' ');else return'';return dateutil.str_to_user(t[0])+' '+t[1];}
$(wrapper).html(repl('<p>Created:<br> <span class="avatar-small">\
<img title="%(created_by)s" src="%(avatar_created)s" /></span> \
<span class="help small">%(creation)s</span></p>\

View File

@ -283,7 +283,7 @@ wn.request.cleanup=function(opts,r){if(opts.btn)$(opts.btn).done_working();if(op
return;}
if(r.server_messages)msgprint(r.server_messages)
if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');}
if(r.docs)LocalDB.sync(r.docs);}
if(r.docs){LocalDB.sync(r.docs);}}
wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
if(opts.error)opts.error(xhr)}})}
wn.call=function(opts){var args=$.extend({},opts.args)
@ -626,8 +626,10 @@ LocalDB.add=function(dt,dn){if(!locals[dt])locals[dt]={};if(locals[dt][dn])delet
LocalDB.delete_doc=function(dt,dn){var doc=get_local(dt,dn);for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||doc.__oldparent==dn)){delete locals[ndt][ndn];}}}}
delete locals[dt][dn];}
function get_local(dt,dn){return locals[dt]?locals[dt][dn]:null;}
LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);for(var i=0;i<list.length;i++){var d=list[i];if(!d.name)
LocalDB.sync=function(list){if(list._kl)list=expand_doclist(list);if(list){LocalDB.clear_locals(list[0].doctype,list[0].name);}
for(var i=0;i<list.length;i++){var d=list[i];if(!d.name)
d.name=LocalDB.get_localname(d.doctype);LocalDB.add(d.doctype,d.name);locals[d.doctype][d.name]=d;if(d.doctype=='DocField')wn.meta.add_field(d);if(d.localname){wn.model.new_names[d.localname]=d.name;$(document).trigger('rename',[d.doctype,d.localname,d.name]);delete locals[d.doctype][d.localname];}}}
LocalDB.clear_locals=function(dt,dn){var doclist=make_doclist(dt,dn,1);$.each(doclist,function(i,v){v&&delete locals[v.doctype][v.name];});}
local_name_idx={};LocalDB.get_localname=function(doctype){if(!local_name_idx[doctype])local_name_idx[doctype]=1;var n='New '+get_doctype_label(doctype)+' '+local_name_idx[doctype];local_name_idx[doctype]++;return n;}
LocalDB.set_default_values=function(doc){var doctype=doc.doctype;var docfields=wn.meta.docfield_list[doctype];if(!docfields){return;}
var fields_to_refresh=[];for(var fid=0;fid<docfields.length;fid++){var f=docfields[fid];if(!in_list(no_value_fields,f.fieldtype)&&doc[f.fieldname]==null){var v=LocalDB.get_default_value(f.fieldname,f.fieldtype,f['default']);if(v){doc[f.fieldname]=v;fields_to_refresh.push(f.fieldname);}}}
@ -657,7 +659,8 @@ return sys_defaults[fn];}
LocalDB.add_child=function(doc,childtype,parentfield){var n=LocalDB.create(childtype);var d=locals[childtype][n];d.parent=doc.name;d.parentfield=parentfield;d.parenttype=doc.doctype;return d;}
LocalDB.no_copy_list=['amended_from','amendment_date','cancel_reason'];LocalDB.copy=function(dt,dn,from_amend){var newdoc=LocalDB.create(dt);for(var key in locals[dt][dn]){var df=get_field(dt,key);if(key!=='name'&&key.substr(0,2)!='__'&&!(df&&((!from_amend&&cint(df.no_copy)==1)||in_list(LocalDB.no_copy_list,df.fieldname)))){locals[dt][newdoc][key]=locals[dt][dn][key];}}
return locals[dt][newdoc];}
function make_doclist(dt,dn,deleted){var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}}
function make_doclist(dt,dn,deleted){if(!locals[dt]){return[];}
var dl=[];dl[0]=locals[dt][dn];for(var ndt in locals){if(locals[ndt]){for(var ndn in locals[ndt]){var doc=locals[ndt][ndn];if(doc&&doc.parenttype==dt&&(doc.parent==dn||(deleted&&doc.__oldparent==dn))){dl[dl.length]=doc;}}}}
return dl;}
var Meta={};var local_dt={};Meta.make_local_dt=function(dt,dn){var dl=make_doclist('DocType',dt);if(!local_dt[dt])local_dt[dt]={};if(!local_dt[dt][dn])local_dt[dt][dn]={};for(var i=0;i<dl.length;i++){var d=dl[i];if(d.doctype=='DocField'){var key=d.fieldname?d.fieldname:d.label;local_dt[dt][dn][key]=copy_dict(d);}}}
Meta.get_field=function(dt,fn,dn){if(dn&&local_dt[dt]&&local_dt[dt][dn]){return local_dt[dt][dn][fn];}else{if(wn.meta.docfield_map[dt])var d=wn.meta.docfield_map[dt][fn];if(d)return d;}

View File

@ -98,19 +98,20 @@ return v;};function LinkField(){}LinkField.prototype=new Field();LinkField.proto
$(me.btn2).css('display','inline-block');else $dh(me.btn2);}}
me.txt.field_object=this;me.input.set_input=function(val){if(val==undefined)val='';me.txt.value=val;}
me.get_value=function(){return me.txt.value;}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){if(!$(this).val()){if(selector&&selector.display)
return;me.set_input_value('');}})}
$(me.txt).autocomplete({source:function(request,response){wn.call({method:'webnotes.widgets.search.search_link',args:{'txt':request.term,'dt':me.df.options,'query':me.get_custom_query()},callback:function(r){response(r.results);},});},select:function(event,ui){me.set_input_value(ui.item.value);}}).data('autocomplete')._renderItem=function(ul,item){return $('<li></li>').data('item.autocomplete',item).append(repl('<a>%(label)s<br><span style="font-size:10px">%(info)s</span></a>',item)).appendTo(ul);};$(this.txt).change(function(){var val=$(this).val();me.set_input_value_executed=false;if(!val){if(selector&&selector.display)
return;me.set_input_value('');}else{setTimeout(function(){if(!me.set_input_value_executed){me.set_input_value(val);}},100);}})}
LinkField.prototype.get_custom_query=function(){this.set_get_query();if(this.get_query){if(cur_frm)
var doc=locals[cur_frm.doctype][cur_frm.docname];return this.get_query(doc,this.doctype,this.docname);}}
LinkField.prototype.setup_buttons=function(){var me=this;me.btn.onclick=function(){selector.set(me,me.df.options,me.df.label);selector.show(me.txt);}
if(me.btn1)me.btn1.onclick=function(){if(me.txt.value&&me.df.options){loaddoc(me.df.options,me.txt.value);}}
me.can_create=0;if((!me.not_in_form)&&in_list(profile.can_create,me.df.options)){me.can_create=1;me.btn2.onclick=function(){var on_save_callback=function(new_rec){if(new_rec){var d=_f.calling_doc_stack.pop();locals[d[0]][d[1]][me.df.fieldname]=new_rec;me.refresh();if(me.grid)me.grid.refresh();me.run_trigger();}}
_f.calling_doc_stack.push([me.doctype,me.docname]);new_doc(me.df.options,me.on_new,1,on_save_callback,me.doctype,me.docname,me.frm.not_in_container);}}else{$dh(me.btn2);$y($td(me.tab,0,2),{width:'0px'});}}
LinkField.prototype.set_input_value=function(val){var me=this;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
LinkField.prototype.set_input_value=function(val){var me=this;me.set_input_value_executed=true;var from_selector=false;if(selector&&selector.display)from_selector=true;me.refresh_label_icon();if(me.not_in_form){$(this.txt).val(val);return;}
if(cur_frm){if(val==locals[me.doctype][me.docname][me.df.fieldname]){me.run_trigger();return;}}
me.set(val);if(_f.cur_grid_cell)
_f.cur_grid_cell.grid.cell_deselect();if(locals[me.doctype][me.docname][me.df.fieldname]&&!val){me.run_trigger();return;}
var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
me.validate_link(val,from_selector);}
LinkField.prototype.validate_link=function(val,from_selector){var me=this;var fetch='';if(cur_frm.fetch_dict[me.df.fieldname])
fetch=cur_frm.fetch_dict[me.df.fieldname].columns.join(', ');$c('webnotes.widgets.form.utils.validate_link',{'value':val,'options':me.df.options,'fetch':fetch},function(r,rt){if(r.message=='Ok'){if($(me.txt).val()!=val){if((me.grid&&!from_selector)||(!me.grid)){$(me.txt).val(val);}}
if(r.fetch_values)
me.set_fetch_values(r.fetch_values);me.run_trigger();}else{var astr='';if(in_list(profile.can_create,me.df.options))astr=repl('<br><br><span class="link_type" onclick="newdoc(\'%(dt)s\')">Click here</span> to create a new %(dtl)s',{dt:me.df.options,dtl:get_doctype_label(me.df.options)})