Merge branch 'master' into stable

This commit is contained in:
Rushabh Mehta 2011-08-16 11:54:03 +05:30
commit ccfab6b37c
41 changed files with 291 additions and 369 deletions

View File

@ -72,16 +72,6 @@ cur_frm.fields_dict['master_name'].get_query=function(doc){
else alert("Please select master type");
}
/*
// Get customer/supplier address
// -----------------------------------------
cur_frm.cscript.master_name = function(doc,cdt,cdn){
if(doc.master_name){
get_server_fields('get_address','','',doc,cdt,cdn);
}
}
*/
// parent account get query
// -----------------------------------------
cur_frm.fields_dict['parent_account'].get_query = function(doc){

View File

@ -31,7 +31,7 @@ class DocType:
ret = {
'company_abbr' : abbr
}
return cstr(ret)
return ret
def validate(self):
# Cost Center name must be unique

View File

@ -39,7 +39,7 @@ class DocType(TransactionBase):
'company_address': cstr(comp_det[0][0]),
'registration_details': cstr(comp_det[0][1])
}
return cstr(ret)
return ret
# Get party details
#------------------

View File

@ -38,9 +38,9 @@ class DocType:
args = eval(args)
o_s = sql("select outstanding_amount from `tab%s` where name = '%s'" % (args['doctype'],args['docname']))
if args['doctype'] == 'Payable Voucher':
return cstr({'debit': o_s and flt(o_s[0][0]) or 0})
return {'debit': o_s and flt(o_s[0][0]) or 0}
if args['doctype'] == 'Receivable Voucher':
return cstr({'credit': o_s and flt(o_s[0][0]) or 0})
return {'credit': o_s and flt(o_s[0][0]) or 0}
#--------------------------------------------------------------------------------------------------------
# Create remarks

View File

@ -48,14 +48,14 @@ class DocType(TransactionBase):
ret['due_date'] = add_days(cstr(self.doc.posting_date), acc_head and cint(acc_head[0][1]) or 0)
elif not acc_head:
msgprint("%s does not have an Account Head in %s. You must first create it from the Supplier Master" % (self.doc.supplier, self.doc.company))
return cstr(ret)
return ret
def get_cust(self):
ret = {}
if self.doc.credit_to:
ret['supplier'] = get_value('Account',self.doc.credit_to,'master_name')
return cstr(ret)
return ret
# Get Default Cost Center and Expense Head from Item Master
@ -70,7 +70,7 @@ class DocType(TransactionBase):
if not args['cost_center'] or args['cost_center'] == 'undefined':
cost_center = sql("select cost_center from `tabItem` where name = '%s'" % args['item_code'])
ret['cost_center'] = cost_center and cost_center[0][0] or ''
return cstr(ret)
return ret
# Get Items based on PO or PR
@ -115,7 +115,7 @@ class DocType(TransactionBase):
'cost_center' : item_det and item_det[0]['cost_center'] or '',
'item_tax_rate' : str(t)
}
return cstr(ret)
return ret
# Advance Allocation
# -------------------
@ -139,7 +139,7 @@ class DocType(TransactionBase):
def get_rate1(self,acc):
rate = sql("select tax_rate from `tabAccount` where name='%s'"%(acc))
ret={'add_tax_rate' :rate and flt(rate[0][0]) or 0 }
return cstr(ret)
return ret
# *************************** Server Utility Functions *****************************

View File

@ -90,7 +90,7 @@ class DocType(TransactionBase):
def get_debit_to(self):
acc_head = self.get_customer_account()
if acc_head:
return cstr({ 'debit_to' : acc_head })
return { 'debit_to' : acc_head }
# Set Due Date = Posting Date + Credit Days
@ -515,7 +515,7 @@ class DocType(TransactionBase):
ret = {
'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0
}
return cstr(ret)
return ret
# Make GL Entries
# -------------------------

View File

@ -34,7 +34,7 @@ class DocType:
else:
ret = { 'registration_details': cstr(comp_det[0][0])}
return cstr(ret)
return ret
# Get default bank and tds account
#------------------------------------

View File

@ -84,7 +84,7 @@ class DocType(TransactionBase):
# ********** get primary contact details (this is done separately coz. , in case there is no primary contact thn it would not be able to fetch customer details in case of join query)
contact_det = sql("select contact_name, contact_no, email_id from `tabContact` where supplier = '%s' and is_supplier = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(name), as_dict = 1)
ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
return cstr(ret)
return ret
else:
msgprint("Supplier : %s does not exists" % (name))
raise Exception
@ -142,14 +142,14 @@ class DocType(TransactionBase):
ret['purchase_rate'] = item and flt(item[0]['last_purchase_rate']) or 0
ret['import_rate'] = flt(item and flt(item[0]['last_purchase_rate']) or 0) / flt(obj.doc.fields.has_key('conversion_rate') and flt(obj.doc.conversion_rate) or 1)
return cstr(ret)
return ret
# Get Available Qty at Warehouse
def get_bin_details( self, arg = ''):
arg = eval(arg)
bin = sql("select projected_qty from `tabBin` where item_code = %s and warehouse = %s", (arg['item_code'], arg['warehouse']), as_dict=1)
ret = { 'projected_qty' : bin and flt(bin[0]['projected_qty']) or 0 }
return str(ret)
return ret
# Get UOM Details
def get_uom_details(self, arg = ''):
@ -163,7 +163,7 @@ class DocType(TransactionBase):
'purchase_rate' : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])) or 0
}
return str(ret)
return ret
# get last purchase rate
def get_last_purchase_rate( self, obj):
@ -522,7 +522,7 @@ class DocType(TransactionBase):
'rate' : rate and (rate[0]['account_type'] == 'Tax' and not arg['charge_type'] == 'Actual') and flt(rate[0]['tax_rate']) or 0
}
#msgprint(ret)
return cstr(ret)
return ret

View File

@ -38,23 +38,17 @@ class DocType(TransactionBase):
get_obj(dt = 'Purchase Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'PO Date')
# Client Trigger Functions
#----------------------------------------------------------------------------------------------------
# Get Supplier Details
#def get_supplier_details(self, name = ''):
#return cstr(get_obj(dt='Purchase Common').get_supplier_details(name))
# Get Item Details
def get_item_details(self, arg =''):
return cstr(get_obj(dt='Purchase Common').get_item_details(self,arg))
return get_obj(dt='Purchase Common').get_item_details(self,arg)
# Get UOM Details
def get_uom_details(self, arg = ''):
return cstr(get_obj(dt='Purchase Common').get_uom_details(arg))
return get_obj(dt='Purchase Common').get_uom_details(arg)
# get available qty at warehouse
def get_bin_details(self, arg = ''):
return cstr(get_obj(dt='Purchase Common').get_bin_details(arg))
return get_obj(dt='Purchase Common').get_bin_details(arg)
# Pull Indent
def get_indent_details(self):

View File

@ -18,7 +18,7 @@ class DocType:
'supplier_name' : cd and cd[0][4] or '',
'supplier_address': cd and cd[0][5] or ''
}
return cstr(ret)
return ret
def get_rfq_details(self):
self.doc.clear_table(self.doclist, 'supplier_quotation_details')
@ -28,12 +28,12 @@ class DocType:
def update_approval_status(self):
if not self.doc.approval_status or self.doc.approval_status == 'Not Approved':
set(self.doc, 'approval_status','Approved')
return cstr(self.doc.approval_status)
return self.doc.approval_status
elif self.doc.approval_status == 'Approved':
pc_obj = get_obj('Purchase Common')
pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.doc.name, detail_doctype = 'PO Detail')
set(self.doc, 'approval_status', 'Not Approved')
return cstr(self.doc.approval_status)
return self.doc.approval_status
def validate_item_list(self):
if not getlist(self.doclist, 'supplier_quotation_details'):
@ -101,4 +101,4 @@ class DocType:
# Get Supplier Details
# --------------------
def get_supplier_details(self, name = ''):
return cstr(get_obj('Purchase Common').get_supplier_details(name))
return get_obj('Purchase Common').get_supplier_details(name)

View File

@ -26,7 +26,7 @@ class DocType:
emp_nm = sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee)
emp_nm= emp_nm and emp_nm[0][0] or ''
self.doc.employee_name = emp_nm
return cstr(emp_nm)
return emp_nm
def fetch_kra(self):
if not self.doc.kra_template:
@ -88,7 +88,7 @@ class DocType:
if d.score:
total = total + flt(d.score_earned)
ret={'total_score':flt(total)}
return cstr(ret)
return ret
def declare_completed(self):
ret={}

View File

@ -34,7 +34,7 @@ class DocType:
set(self.doc, 'employee_name', emp_nm and emp_nm[0][0] or '')
ret = { 'employee_name' : emp_nm and emp_nm[0][0] or ''}
return str(ret)
return ret
#validation for duplicate record
def validate_duplicate_record(self):

View File

@ -41,7 +41,7 @@ class DocType:
if self.doc.date_of_birth:
dt = getdate(self.doc.date_of_birth) + datetime.timedelta(21915)
ret = {'date_of_retirement': dt.strftime('%Y-%m-%d')}
return str(ret)
return ret
# check if salary structure exists
#========================================================================================================

View File

@ -66,7 +66,7 @@ class DocType:
'carry_forwarded_leaves' : prev_bal,
'total_leaves_allocated' : flt(prev_bal) + flt(self.doc.new_leaves_allocated)
}
return str(ret)
return ret
# ********************************************** validate *****************************************************

View File

@ -55,9 +55,6 @@ cur_frm.cscript.to_date = function(doc, dt, dn) {
if(cint(doc.half_day) == 1 && cstr(doc.from_date) && doc.from_date != doc.to_date){
msgprint("To Date should be same as From Date for Half Day leave");
set_multiple(dt,dn,{to_date:doc.from_date});
}
if(cint(doc.half_day) == 1){
}
calculate_total_days(doc, dt, dn);
}

View File

@ -42,7 +42,7 @@ class DocType:
'grade' : cstr(det[0][4]),
'backup_employee': cstr(self.doc.employee)
}
return cstr(ret)
return ret
# Set Salary structure field values
@ -53,7 +53,7 @@ class DocType:
'bank_ac_no' : basic_info and basic_info[0][1] or '',
'esic_no' : basic_info and basic_info[0][2] or '',
'pf_no' : basic_info and basic_info[0][3] or ''}
return cstr(ret)
return ret
# Make earning and deduction table
#---------------------------------------------------------

View File

@ -1374,6 +1374,34 @@ def execute(patch_no):
html = "acx=".join(sp_acx)
webnotes.conn.sql("""UPDATE tabItem SET description_html=%s WHERE name=%s""", (html, item))
elif patch_no == 338:
# Patch for billing status based on amount
# reload so and dn
reload_doc('selling','doctype','sales_order')
reload_doc('stock','doctype','delivery_note')
# delete billed_qty field
sql("delete from `tabDocField` where fieldname = 'billed_qty' and parent in ('Sales Order Detail', 'Delivery Note Detail')")
# update billed amt in item table in so and dn
sql(""" update `tabSales Order Detail` so
set billed_amt = (select sum(amount) from `tabRV Detail` where `so_detail`= so.name and docstatus=1 and parent not like 'old%%'), modified = now()""")
sql(""" update `tabDelivery Note Detail` dn
set billed_amt = (select sum(amount) from `tabRV Detail` where `dn_detail`= dn.name and docstatus=1 and parent not like 'old%%'), modified = now()""")
# calculate % billed based on item table
sql(""" update `tabSales Order` so
set per_billed = (select sum(if(amount > ifnull(billed_amt, 0), billed_amt, amount))/sum(amount)*100 from `tabSales Order Detail` where parent = so.name), modified = now()""")
sql(""" update `tabDelivery Note` dn
set per_billed = (select sum(if(amount > ifnull(billed_amt, 0), billed_amt, amount))/sum(amount)*100 from `tabDelivery Note Detail` where parent = dn.name), modified = now()""")
# update billing status based on % billed
sql("""update `tabSales Order` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed',
if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""")
sql("""update `tabDelivery Note` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed',
if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""")
# update name of questions page
sql("update tabPage set name='questions' where name='Questions'")
sql("update tabPage set name='question-view' where name='Question View'")

View File

@ -36,7 +36,7 @@ class DocType:
ret={
'description' : item and item[0]['description'] or ''
}
return cstr(ret)
return ret
def get_workstation_details(self,workstation):
ws = sql("select hour_rate, capacity from `tabWorkstation` where name = %s",workstation , as_dict = 1)
@ -44,7 +44,7 @@ class DocType:
'hour_rate' : ws and flt(ws[0]['hour_rate']) or '',
'workstation_capacity' : ws and flt(ws[0]['capacity']) or ''
}
return cstr(ret)
return ret
def get_bom_material_detail(self, arg):
arg = eval(arg)
@ -106,7 +106,7 @@ class DocType:
'standard_rate' : 0
}
ret_item.update(ret_bom_rates)
return cstr(ret_item)
return ret_item
def set_as_default_bom(self):
# set Is Default as 1

View File

@ -32,7 +32,7 @@ class DocType:
'stock_uom' : item and item[0]['stock_uom'],
'bom_no' : item and item[0]['default_bom']
}
return cstr(ret)
return ret
else:
msgprint("Item %s does not exist in system." %(args['item_code']))
raise Exception

View File

@ -25,7 +25,7 @@ class DocType:
def update_bom_operation(self):
bom_list = sql(" select DISTINCT parent from `tabBOM Operation` where workstation = '%s'" % self.doc.name)
for bom_no in bom_list:
sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no, self.doc.name))
sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no[0], self.doc.name))
def on_update(self):
set(self.doc, 'overhead', flt(self.doc.hour_rate_electricity) + flt(self.doc.hour_rate_consumable) + flt(self.doc.hour_rate_rent))

View File

@ -38,7 +38,7 @@ class DocType:
ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
ret['contact_no'] = contact_det and contact_det[0]['contact_no'] or ''
ret['email_id'] = contact_det and contact_det[0]['email_id'] or ''
return cstr(ret)
return ret
else:
msgprint("Customer : %s does not exist in system." % (self.doc.customer))
raise Exception
@ -65,7 +65,7 @@ class DocType:
#if pft > 0:
per_pft = (flt(pft) / flt(self.doc.project_value)) * 100
ret = {'gross_margin_value': pft, 'per_gross_margin': per_pft}
return cstr(ret)
return ret
# validate
#================================================

View File

@ -22,18 +22,18 @@ class DocType:
cust = sql("select customer, customer_name from `tabProject` where name = %s", self.doc.project)
if cust:
ret = {'customer': cust and cust[0][0] or '', 'customer_name': cust and cust[0][1] or ''}
return cstr(ret)
return ret
def get_customer_details(self):
cust = sql("select customer_name from `tabCustomer` where name=%s", self.doc.customer)
if cust:
ret = {'customer_name': cust and cust[0][0] or ''}
return cstr(ret)
return ret
def get_allocated_to_name(self):
as_em = sql("select first_name, last_name from `tabProfile` where name=%s",self.doc.allocated_to)
ret = { 'allocated_to_name' : as_em and (as_em[0][0] + ' ' + as_em[0][1]) or ''}
return cstr(ret)
return ret
# validate
#--------------------------------------------

View File

@ -32,7 +32,7 @@ class DocType:
tsk = sql("select name, project, customer, customer_name from `tabTicket` where subject = %s", task_sub)
if tsk:
ret = {'task_id': tsk and tsk[0][0] or '', 'project_name': tsk and tsk[0][1] or '', 'customer_name': tsk and tsk[0][3] or ''}
return cstr(ret)
return ret
def validate(self):
if getdate(self.doc.timesheet_date) > getdate(nowdate()):

View File

@ -50,7 +50,7 @@ class DocType(TransactionBase):
ret['contact_no'] = contact_det and contact_det[0]['contact_no'] or ''
ret['email_id'] = contact_det and contact_det[0]['email_id'] or ''
return cstr(ret)
return ret
else:
msgprint("Customer : %s does not exist in system." % (name))
raise Exception
@ -64,7 +64,7 @@ class DocType(TransactionBase):
'contact_no' : contact and contact[0]['contact_no'] or '',
'email_id' : contact and contact[0]['email_id'] or ''
}
return str(ret)
return ret
# ====================================================================================================================
def on_update(self):
@ -184,7 +184,7 @@ class DocType(TransactionBase):
else:
set(self.doc, 'status', 'Enquiry Lost')
set(self.doc, 'order_lost_reason', arg)
return cstr('true')
return 'true'
# ====================================================================================================================
def update_follow_up(self):

View File

@ -29,20 +29,7 @@ class DocType(TransactionBase):
# ---------
def autoname(self):
self.doc.name = make_autoname(self.doc.naming_series+'.#####')
#fetch customer details
#=================================
#def get_customer_details(self):
# det = sql("select t1.customer_name, t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = '%s' and t1.name=t2.customer and t2.is_primary_contact = 'Yes'"%self.doc.customer, as_dict=1)
# ret = {
# 'customer_name': det and det[0]['customer_name'] or '',
# 'address' : det and det[0]['address'] or '',
# 'territory': det and det[0]['territory'] or '',
# 'contact_person' : det and det[0]['contact_name'] or ''
# }
# return str(ret)
#fetch delivery note details
#====================================

View File

@ -51,7 +51,7 @@ class DocType:
'description': it and it[0][3] or '',
'uom' : it and it[0][4] or ''
}
return cstr(ret)
return ret
def validate(self):
import string

View File

@ -45,17 +45,12 @@ class DocType(TransactionBase):
self.get_adj_percent()
return cstr(self.doc.quotation_to)
# Get Customer Details
# --------------------
#def get_customer_details(self):
# return cstr(get_obj('Sales Common').get_customer_details(self))
return self.doc.quotation_to
# Get contact person details based on customer selected
# ------------------------------------------------------
def get_contact_details(self):
return cstr(get_obj('Sales Common').get_contact_details(self,0))
return get_obj('Sales Common').get_contact_details(self,0)
# Clear Quotation Details
# -----------------------
@ -111,7 +106,7 @@ class DocType(TransactionBase):
'contact_mobile' : details and details[0]['mobile_no'] or '-',
'contact_email' : details and details[0]['email_id'] or '-'
}
return cstr(ret)
return ret
# GET TERMS AND CONDITIONS
@ -295,7 +290,7 @@ class DocType(TransactionBase):
set(self.doc, 'status', 'Order Lost')
set(self.doc, 'order_lost_reason', arg)
self.update_enquiry('order lost')
return cstr('true')
return 'true'
#check if value entered in item table
#--------------------------------------

View File

@ -118,21 +118,21 @@ class DocType(TransactionBase):
t = {}
for x in tax: t[x[0]] = flt(x[1])
ret = {
'description' : item and item[0]['description_html'] or item[0]['description'],
'item_group' : item and item[0]['item_group'] or '',
'item_name' : item and item[0]['item_name'] or '',
'brand' : item and item[0]['brand'] or '',
'stock_uom' : item and item[0]['stock_uom'] or '',
'reserved_warehouse' : item and item[0]['default_warehouse'] or '',
'warehouse' : item and item[0]['default_warehouse'] or '',
'income_account' : item and item[0]['default_income_account'] or '',
'cost_center' : item and item[0]['default_sales_cost_center'] or '',
'qty' : 1.00, # this is done coz if item once fetched is fetched again thn its qty shld be reset to 1
'adj_rate' : 0,
'amount' : 0,
'export_amount' : 0,
'item_tax_rate' : str(t),
'batch_no' : ''
'description' : item and item[0]['description_html'] or item[0]['description'],
'item_group' : item and item[0]['item_group'] or '',
'item_name' : item and item[0]['item_name'] or '',
'brand' : item and item[0]['brand'] or '',
'stock_uom' : item and item[0]['stock_uom'] or '',
'reserved_warehouse' : item and item[0]['default_warehouse'] or '',
'warehouse' : item and item[0]['default_warehouse'] or '',
'income_account' : item and item[0]['default_income_account'] or '',
'cost_center' : item and item[0]['default_sales_cost_center'] or '',
'qty' : 1.00, # this is done coz if item once fetched is fetched again thn its qty shld be reset to 1
'adj_rate' : 0,
'amount' : 0,
'export_amount' : 0,
'item_tax_rate' : str(t),
'batch_no' : ''
}
if(obj.doc.price_list_name and item): #this is done to fetch the changed BASIC RATE and REF RATE based on PRICE LIST
ref_rate = self.get_ref_rate(item_code, obj.doc.price_list_name, obj.doc.currency)
@ -143,7 +143,8 @@ class DocType(TransactionBase):
if obj.doc.doctype == 'Receivable Voucher':
return ret
return str(ret)
return ret
# ***************** Get Ref rate as entered in Item Master ********************
def get_ref_rate(self, item_code, price_list_name, currency):
@ -161,7 +162,6 @@ class DocType(TransactionBase):
d.base_ref_rate = flt(ref_rate) * flt(obj.doc.conversion_rate)
d.export_rate = flt(ref_rate)
# Load Default Taxes
# ====================
def load_default_taxes(self, obj):
@ -203,7 +203,7 @@ class DocType(TransactionBase):
ret = {
'item_tax_rate' : tax and str(t) or ''
}
return str(ret)
return ret
# Get Serial No Details
# ==========================================================================
@ -220,7 +220,7 @@ class DocType(TransactionBase):
'description' : item and item[0]['description'] or '',
'item_tax_rate' : str(t)
}
return str(ret)
return ret
# Get Commission rate
# =======================================================================
@ -233,7 +233,7 @@ class DocType(TransactionBase):
'commission_rate' : comm_rate and flt(comm_rate[0]['commission_rate']) or 0,
'total_commission' : flt(total_comm)
}
return str(ret)
return ret
else:
msgprint("Business Associate : %s does not exist in the system." % (sales_partner))
raise Exception
@ -287,7 +287,7 @@ class DocType(TransactionBase):
ret = {
'rate' : rate and flt(rate[0]['tax_rate']) or 0
}
return cstr(ret)
return ret
# Make Packing List from Sales BOM
@ -324,7 +324,7 @@ class DocType(TransactionBase):
if self.has_sales_bom(d.item_code):
for i in self.get_sales_bom_items(d.item_code):
il.append([warehouse, i[0], flt(flt(i[1])* qty), reserved_qty, i[2], d.batch_no, d.serial_no])
il.append([warehouse, i[0], flt(flt(i[1])* qty), flt(flt(i[1])*reserved_qty), i[2], d.batch_no, d.serial_no])
else:
il.append([warehouse, d.item_code, qty, reserved_qty, d.stock_uom, d.batch_no, d.serial_no])
return il
@ -498,7 +498,7 @@ class StatusUpdater:
- Validate over delivery
From Receivable Voucher
- Update Billed Qty
- Update Billed Amt
- Update Percent
- Validate over billing
@ -526,23 +526,33 @@ class StatusUpdater:
self.validate_qty({
'source_dt' :'Delivery Note Detail',
'compare_field' :'delivered_qty',
'compare_ref_field' :'qty',
'target_dt' :'Sales Order Detail',
'join_field' :'prevdoc_detail_docname'
})
elif self.obj.doc.doctype=='Receivable Voucher':
self.validate_qty({
'source_dt' :'RV Detail',
'compare_field' :'billed_qty',
'compare_field' :'billed_amt',
'compare_ref_field' :'amount',
'target_dt' :'Sales Order Detail',
'join_field' :'so_detail'
})
self.validate_qty({
'source_dt' :'RV Detail',
'compare_field' :'billed_amt',
'compare_ref_field' :'amount',
'target_dt' :'Delivery Note Detail',
'join_field' :'dn_detail'
}, no_tolerance =1)
elif self.obj.doc.doctype=='Installation Note':
self.validate_qty({
'source_dt' :'Installation Item Details',
'compare_field' :'installed_qty',
'compare_ref_field' :'qty',
'target_dt' :'Delivery Note Detail',
'join_field' :'dn_detail'
}, no_tolerance =1);
}, no_tolerance =1)
def get_tolerance_for(self, item_code):
@ -569,22 +579,22 @@ class StatusUpdater:
# check if overflow is within tolerance
tolerance = self.get_tolerance_for(item['item_code'])
overflow_percent = ((item[args['compare_field']] - item['qty']) / item['qty'] * 100)
overflow_percent = ((item[args['compare_field']] - item[args['compare_ref_field']]) / item[args['compare_ref_field']] * 100)
if overflow_percent - tolerance > 0.0001:
item['max_allowed'] = flt(item['qty'] * (100+tolerance)/100)
item['max_allowed'] = flt(item[args['compare_ref_field']] * (100+tolerance)/100)
item['reduce_by'] = item[args['compare_field']] - item['max_allowed']
msgprint("""
Row #%(idx)s: Max qty allowed for <b>Item %(item_code)s</b> against <b>%(parenttype)s %(parent)s</b> is <b>%(max_allowed)s</b>.
Row #%(idx)s: Max %(compare_ref_field)s allowed for <b>Item %(item_code)s</b> against <b>%(parenttype)s %(parent)s</b> is <b>%(max_allowed)s</b>.
If you want to increase your overflow tolerance, please increase tolerance %% in Global Defaults or Item master.
Or, you must reduce the qty by %(reduce_by)s""" % item, raise_exception=1)
Or, you must reduce the %(compare_ref_field)s by %(reduce_by)s""" % item, raise_exception=1)
def validate_qty(self, args, no_tolerance=None):
"""
Updates qty at row level
Validates qty at row level
"""
# get unique transactions to update
for d in self.obj.doclist:
@ -593,22 +603,23 @@ class StatusUpdater:
# get all qty where qty > compare_field
item = sql("""
select item_code, qty, `%(compare_field)s`, parenttype, parent from `tab%(target_dt)s`
where qty < `%(compare_field)s` and name="%(name)s" and docstatus=1
select item_code, `%(compare_ref_field)s`, `%(compare_field)s`, parenttype, parent from `tab%(target_dt)s`
where `%(compare_ref_field)s` < `%(compare_field)s` and name="%(name)s" and docstatus=1
""" % args, as_dict=1)
if item:
item = item[0]
item['idx'] = d.idx
item['compare_ref_field'] = args['compare_ref_field']
if no_tolerance:
item['reduce_by'] = item[args['compare_field']] - item['qty']
item['reduce_by'] = item[args['compare_field']] - item[args['compare_ref_field']]
msgprint("""
Row #%(idx)s: Max qty allowed for <b>Item %(item_code)s</b> against
<b>%(parenttype)s %(parent)s</b> is <b>%(qty)s</b>.
Row #%(idx)s: Max %(compare_ref_field)s allowed for <b>Item %(item_code)s</b> against
<b>%(parenttype)s %(parent)s</b> is <b>""" % item
+ cstr(item[args['compare_ref_field']]) + """</b>.
You must reduce the qty by %(reduce_by)s""" % item, raise_exception=1)
You must reduce the %(compare_ref_field)s by %(reduce_by)s""" % item, raise_exception=1)
else:
self.check_overflow_with_tolerance(item, args)
@ -623,6 +634,7 @@ class StatusUpdater:
'target_dt' :'Sales Order Detail',
'target_parent_dt' :'Sales Order',
'target_parent_field' :'per_delivered',
'target_ref_field' :'qty',
'source_dt' :'Delivery Note Detail',
'source_field' :'qty',
'join_field' :'prevdoc_detail_docname',
@ -633,12 +645,13 @@ class StatusUpdater:
elif self.obj.doc.doctype=='Receivable Voucher':
self.update_qty({
'target_field' :'billed_qty',
'target_field' :'billed_amt',
'target_dt' :'Sales Order Detail',
'target_parent_dt' :'Sales Order',
'target_parent_field' :'per_billed',
'target_ref_field' :'amount',
'source_dt' :'RV Detail',
'source_field' :'qty',
'source_field' :'amount',
'join_field' :'so_detail',
'percent_join_field' :'sales_order',
'status_field' :'billing_status',
@ -646,12 +659,13 @@ class StatusUpdater:
})
self.update_qty({
'target_field' :'billed_qty',
'target_field' :'billed_amt',
'target_dt' :'Delivery Note Detail',
'target_parent_dt' :'Delivery Note',
'target_parent_field' :'per_billed',
'target_ref_field' :'amount',
'source_dt' :'RV Detail',
'source_field' :'qty',
'source_field' :'amount',
'join_field' :'dn_detail',
'percent_join_field' :'delivery_note',
'status_field' :'billing_status',
@ -664,6 +678,7 @@ class StatusUpdater:
'target_dt' :'Delivery Note Detail',
'target_parent_dt' :'Delivery Note',
'target_parent_field' :'per_installed',
'target_ref_field' :'qty',
'source_dt' :'Installed Item Details',
'source_field' :'qty',
'join_field' :'prevdoc_detail_docname',
@ -694,7 +709,7 @@ class StatusUpdater:
update
`tab%(target_dt)s`
set
%(target_field)s = (select sum(qty) from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" and (docstatus=1 %(cond)s))
%(target_field)s = (select sum(%(source_field)s) from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" and (docstatus=1 %(cond)s))
where
name="%(detail_id)s"
""" % args)
@ -710,10 +725,10 @@ class StatusUpdater:
`tab%(target_parent_dt)s`
set
%(target_parent_field)s =
(select sum(if(qty > ifnull(%(target_field)s, 0), %(target_field)s, qty))/sum(qty)*100 from `tab%(target_dt)s` where parent="%(name)s"),
(select sum(if(%(target_ref_field)s > ifnull(%(target_field)s, 0), %(target_field)s, %(target_ref_field)s))/sum(%(target_ref_field)s)*100 from `tab%(target_dt)s` where parent="%(name)s"),
modified = now()
where
name="%(name)s"
where
name="%(name)s"
""" % args)
# update field

View File

@ -102,8 +102,7 @@ class DocType(TransactionBase):
'projected_qty' : tot_avail_qty and flt(tot_avail_qty[0]['projected_qty']) or 0,
'actual_qty' : tot_avail_qty and flt(tot_avail_qty[0]['actual_qty']) or 0
}
return cstr(ret)
return ret
# OTHER CHARGES TRIGGER FUNCTIONS
# ====================================================================================
@ -136,7 +135,7 @@ class DocType(TransactionBase):
nm = nm and nm[0][0] or ''
if not nm:
return cstr('No')
return 'No'
#check if maintenance visit already generated
#============================================
@ -145,7 +144,7 @@ class DocType(TransactionBase):
nm = nm and nm[0][0] or ''
if not nm:
return cstr('No')
return 'No'
# VALIDATE
# =====================================================================================

View File

@ -5,15 +5,14 @@
{
'creation': '2010-08-08 17:09:21',
'docstatus': 0,
'modified': '2011-06-27 16:05:56',
'modified': '2011-08-09 17:06:09',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'_last_update': '1309170956',
'client_script': "cur_frm.add_fetch('customer','sales_person','sales_person');",
'_last_update': '1311621379',
'colour': 'White:FFF',
'doctype': 'DocType',
'document_type': 'Transaction',
@ -28,7 +27,7 @@
'show_in_menu': 0,
'subject': 'From %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s | %(per_delivered)s% delivered | %(per_billed)s% billed',
'tag_fields': 'delivery_status,billing_status',
'version': 593
'version': 597
},
# These values are common for all DocField
@ -58,28 +57,23 @@
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 1,
'permlevel': 1,
'role': 'Sales Manager',
'submit': 0,
'write': 0
'permlevel': 0,
'role': 'Production Manager'
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 2,
'permlevel': 0,
'permlevel': 1,
'role': 'Sales Manager',
'submit': 1,
'write': 1
'submit': 0,
'write': 0
},
# DocPerm
@ -90,6 +84,19 @@
'doctype': 'DocPerm',
'idx': 3,
'permlevel': 0,
'role': 'Sales Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 4,
'permlevel': 0,
'role': 'Sales User',
'submit': 1,
'write': 1
@ -101,7 +108,7 @@
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 4,
'idx': 5,
'permlevel': 1,
'role': 'Sales User',
'submit': 0,
@ -111,7 +118,7 @@
# DocPerm
{
'doctype': 'DocPerm',
'idx': 5,
'idx': 6,
'match': 'customer_name',
'permlevel': 0,
'role': 'Customer'
@ -120,7 +127,7 @@
# DocPerm
{
'doctype': 'DocPerm',
'idx': 6,
'idx': 7,
'permlevel': 2,
'role': 'Accounts User',
'write': 1
@ -132,7 +139,7 @@
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 7,
'idx': 8,
'permlevel': 0,
'role': 'Maintenance Manager',
'submit': 1,
@ -142,7 +149,7 @@
# DocPerm
{
'doctype': 'DocPerm',
'idx': 8,
'idx': 9,
'permlevel': 1,
'role': 'Maintenance Manager'
},
@ -153,7 +160,7 @@
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 9,
'idx': 10,
'permlevel': 0,
'role': 'Maintenance User',
'submit': 1,
@ -163,7 +170,7 @@
# DocPerm
{
'doctype': 'DocPerm',
'idx': 10,
'idx': 11,
'permlevel': 1,
'role': 'Maintenance User'
},
@ -204,7 +211,7 @@
'no_copy': 1,
'oldfieldname': 'naming_series',
'oldfieldtype': 'Select',
'options': 'SO\nSO/10-11/',
'options': 'PI/2011/\nSO\nSO/10-11/\nSO1112',
'permlevel': 0,
'print_hide': 1,
'reqd': 1
@ -504,7 +511,7 @@
'fieldtype': 'Currency',
'idx': 23,
'in_filter': 1,
'label': '% Qty Billed',
'label': '% Amount Billed',
'no_copy': 1,
'oldfieldname': 'per_billed',
'oldfieldtype': 'Currency',
@ -605,6 +612,16 @@
'width': '150px'
},
# DocField
{
'doctype': 'DocField',
'fieldname': 'vehicle_detail',
'fieldtype': 'Small Text',
'idx': 30,
'label': 'Vehicle Detail',
'permlevel': 0
},
# DocField
{
'colour': 'White:FFF',
@ -612,7 +629,7 @@
'fieldname': 'quotation_date',
'fieldtype': 'Date',
'hidden': 1,
'idx': 30,
'idx': 31,
'label': 'Quotation Date',
'no_copy': 0,
'oldfieldname': 'quotation_date',
@ -627,7 +644,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 31,
'idx': 32,
'label': 'Pull Quotation Details',
'oldfieldtype': 'Button',
'options': 'pull_quotation_details',
@ -642,7 +659,7 @@
'doctype': 'DocField',
'fieldname': 'price_list_name',
'fieldtype': 'Select',
'idx': 32,
'idx': 33,
'label': 'Price List',
'oldfieldname': 'price_list_name',
'oldfieldtype': 'Select',
@ -658,7 +675,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 33,
'idx': 34,
'permlevel': 0,
'width': '50%'
},
@ -670,7 +687,7 @@
'doctype': 'DocField',
'fieldname': 'currency',
'fieldtype': 'Select',
'idx': 34,
'idx': 35,
'label': 'Currency',
'oldfieldname': 'currency',
'oldfieldtype': 'Select',
@ -689,7 +706,7 @@
'doctype': 'DocField',
'fieldname': 'conversion_rate',
'fieldtype': 'Currency',
'idx': 35,
'idx': 36,
'label': 'Conversion Rate',
'oldfieldname': 'conversion_rate',
'oldfieldtype': 'Currency',
@ -704,7 +721,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 36,
'idx': 37,
'permlevel': 0
},
@ -715,7 +732,7 @@
'doctype': 'DocField',
'fieldname': 'sales_order_details',
'fieldtype': 'Table',
'idx': 37,
'idx': 38,
'label': 'Sales Order Details',
'oldfieldname': 'sales_order_details',
'oldfieldtype': 'Table',
@ -729,7 +746,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 38,
'idx': 39,
'label': 'Clear Table',
'oldfieldtype': 'Button',
'options': 'clear_sales_order_details',
@ -741,7 +758,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 39,
'idx': 40,
'label': 'Re-Calculate Values',
'oldfieldtype': 'Button',
'permlevel': 0,
@ -755,7 +772,7 @@
'doctype': 'DocField',
'fieldname': 'net_total',
'fieldtype': 'Currency',
'idx': 40,
'idx': 41,
'label': 'Net Total*',
'oldfieldname': 'net_total',
'oldfieldtype': 'Currency',
@ -770,7 +787,7 @@
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'HTML',
'idx': 41,
'idx': 42,
'label': 'Note1',
'oldfieldtype': 'HTML',
'options': '<b>NOTE :</b> * In Base Currency',
@ -783,7 +800,7 @@
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 42,
'idx': 43,
'label': 'Taxes',
'oldfieldtype': 'Section Break',
'permlevel': 0,
@ -795,7 +812,7 @@
'doctype': 'DocField',
'fieldname': 'charge',
'fieldtype': 'Link',
'idx': 43,
'idx': 44,
'label': 'Select Charges Master',
'oldfieldname': 'charge',
'oldfieldtype': 'Link',
@ -808,7 +825,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 44,
'idx': 45,
'label': 'Get Charges',
'oldfieldtype': 'Button',
'permlevel': 0,
@ -820,7 +837,7 @@
'doctype': 'DocField',
'fieldname': 'other_charges',
'fieldtype': 'Table',
'idx': 45,
'idx': 46,
'label': 'Other Charges',
'oldfieldname': 'other_charges',
'oldfieldtype': 'Table',
@ -832,7 +849,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 46,
'idx': 47,
'label': 'Calculate Charges',
'oldfieldtype': 'Button',
'permlevel': 0,
@ -845,7 +862,7 @@
'doctype': 'DocField',
'fieldname': 'other_charges_total',
'fieldtype': 'Currency',
'idx': 47,
'idx': 48,
'label': 'Charges Total*',
'oldfieldname': 'other_charges_total',
'oldfieldtype': 'Currency',
@ -859,7 +876,7 @@
'doctype': 'DocField',
'fieldname': 'grand_total',
'fieldtype': 'Currency',
'idx': 48,
'idx': 49,
'label': 'Grand Total*',
'oldfieldname': 'grand_total',
'oldfieldtype': 'Currency',
@ -873,7 +890,7 @@
{
'doctype': 'DocField',
'fieldtype': 'HTML',
'idx': 49,
'idx': 50,
'label': 'OT Notes',
'oldfieldtype': 'HTML',
'options': '<b>NOTE :</b> * In Base Currency',
@ -885,7 +902,7 @@
{
'doctype': 'DocField',
'fieldtype': 'HTML',
'idx': 50,
'idx': 51,
'label': 'Other Charges Calculation',
'oldfieldtype': 'HTML',
'permlevel': 0,
@ -897,7 +914,7 @@
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 51,
'idx': 52,
'label': 'Totals',
'oldfieldtype': 'Section Break',
'permlevel': 0,
@ -909,7 +926,7 @@
'doctype': 'DocField',
'fieldname': 'rounded_total',
'fieldtype': 'Currency',
'idx': 52,
'idx': 53,
'label': 'Rounded Total',
'oldfieldname': 'rounded_total',
'oldfieldtype': 'Currency',
@ -925,7 +942,7 @@
'doctype': 'DocField',
'fieldname': 'in_words',
'fieldtype': 'Data',
'idx': 53,
'idx': 54,
'label': 'In Words',
'oldfieldname': 'in_words',
'oldfieldtype': 'Data',
@ -938,7 +955,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 54,
'idx': 55,
'oldfieldtype': 'Column Break',
'permlevel': 0,
'print_hide': 1,
@ -950,7 +967,7 @@
'doctype': 'DocField',
'fieldname': 'grand_total_export',
'fieldtype': 'Currency',
'idx': 55,
'idx': 56,
'label': 'Grand Total (Export)',
'oldfieldname': 'grand_total_export',
'oldfieldtype': 'Currency',
@ -965,7 +982,7 @@
'doctype': 'DocField',
'fieldname': 'rounded_total_export',
'fieldtype': 'Currency',
'idx': 56,
'idx': 57,
'label': 'Rounded Total (Export)',
'oldfieldname': 'rounded_total_export',
'oldfieldtype': 'Currency',
@ -981,7 +998,7 @@
'doctype': 'DocField',
'fieldname': 'in_words_export',
'fieldtype': 'Data',
'idx': 57,
'idx': 58,
'label': 'In Words (Export)',
'oldfieldname': 'in_words_export',
'oldfieldtype': 'Data',
@ -995,7 +1012,7 @@
'colour': 'White:FFF',
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 58,
'idx': 59,
'label': 'Terms',
'oldfieldtype': 'Section Break',
'permlevel': 0,
@ -1007,7 +1024,7 @@
'doctype': 'DocField',
'fieldname': 'tc_name',
'fieldtype': 'Link',
'idx': 59,
'idx': 60,
'label': 'Select Terms',
'oldfieldname': 'tc_name',
'oldfieldtype': 'Link',
@ -1021,7 +1038,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 60,
'idx': 61,
'label': 'Get Terms',
'oldfieldtype': 'Button',
'options': 'get_tc_details',
@ -1033,7 +1050,7 @@
{
'doctype': 'DocField',
'fieldtype': 'HTML',
'idx': 61,
'idx': 62,
'label': 'Terms HTML',
'oldfieldtype': 'HTML',
'options': 'You can add Terms and Notes that will be printed in the Transaction',
@ -1046,7 +1063,7 @@
'doctype': 'DocField',
'fieldname': 'terms',
'fieldtype': 'Text Editor',
'idx': 62,
'idx': 63,
'label': 'Term Details',
'oldfieldname': 'terms',
'oldfieldtype': 'Text Editor',
@ -1060,7 +1077,7 @@
'description': 'Filling in additional information about the Sales Order will help you analyze your data better.',
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 63,
'idx': 64,
'label': 'More Info',
'oldfieldtype': 'Section Break',
'permlevel': 0,
@ -1071,7 +1088,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 64,
'idx': 65,
'oldfieldtype': 'Column Break',
'permlevel': 0,
'print_hide': 1,
@ -1084,7 +1101,7 @@
'doctype': 'DocField',
'fieldname': 'letter_head',
'fieldtype': 'Select',
'idx': 65,
'idx': 66,
'label': 'Letter Head',
'oldfieldname': 'letter_head',
'oldfieldtype': 'Select',
@ -1100,7 +1117,7 @@
'doctype': 'DocField',
'fieldname': 'company',
'fieldtype': 'Link',
'idx': 66,
'idx': 67,
'in_filter': 1,
'label': 'Company',
'oldfieldname': 'company',
@ -1119,7 +1136,7 @@
'doctype': 'DocField',
'fieldname': 'fiscal_year',
'fieldtype': 'Select',
'idx': 67,
'idx': 68,
'in_filter': 1,
'label': 'Fiscal Year',
'oldfieldname': 'fiscal_year',
@ -1139,7 +1156,7 @@
'doctype': 'DocField',
'fieldname': 'select_print_heading',
'fieldtype': 'Link',
'idx': 68,
'idx': 69,
'label': 'Select Print Heading',
'no_copy': 1,
'oldfieldname': 'select_print_heading',
@ -1154,7 +1171,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Column Break',
'idx': 69,
'idx': 70,
'oldfieldtype': 'Column Break',
'permlevel': 0,
'print_hide': 1,
@ -1167,7 +1184,7 @@
'doctype': 'DocField',
'fieldname': 'source',
'fieldtype': 'Select',
'idx': 70,
'idx': 71,
'label': 'Source',
'oldfieldname': 'source',
'oldfieldtype': 'Select',
@ -1183,7 +1200,7 @@
'doctype': 'DocField',
'fieldname': 'campaign',
'fieldtype': 'Link',
'idx': 71,
'idx': 72,
'label': 'Campaign',
'oldfieldname': 'campaign',
'oldfieldtype': 'Link',
@ -1198,7 +1215,7 @@
'doctype': 'DocField',
'fieldname': 'note',
'fieldtype': 'Text',
'idx': 72,
'idx': 73,
'label': 'Note',
'oldfieldname': 'note',
'oldfieldtype': 'Text',
@ -1213,7 +1230,7 @@
'doctype': 'DocField',
'fieldname': 'cancel_reason',
'fieldtype': 'Data',
'idx': 73,
'idx': 74,
'label': 'Cancel Reason',
'no_column': 0,
'no_copy': 1,
@ -1229,7 +1246,7 @@
'fieldname': 'delivery_status',
'fieldtype': 'Select',
'hidden': 1,
'idx': 74,
'idx': 75,
'label': 'Delivery Status',
'no_column': 0,
'no_copy': 1,
@ -1244,7 +1261,7 @@
'fieldname': 'billing_status',
'fieldtype': 'Select',
'hidden': 1,
'idx': 75,
'idx': 76,
'label': 'Billing Status',
'no_column': 0,
'no_copy': 1,
@ -1260,7 +1277,7 @@
'doctype': 'DocField',
'fieldtype': 'Section Break',
'hidden': 0,
'idx': 76,
'idx': 77,
'label': 'Packing List',
'oldfieldtype': 'Section Break',
'permlevel': 0,
@ -1273,7 +1290,7 @@
'doctype': 'DocField',
'fieldname': 'packing_details',
'fieldtype': 'Table',
'idx': 77,
'idx': 78,
'label': 'Packing Details',
'oldfieldname': 'packing_details',
'oldfieldtype': 'Table',
@ -1286,7 +1303,7 @@
{
'doctype': 'DocField',
'fieldtype': 'Section Break',
'idx': 78,
'idx': 79,
'label': 'Sales Team',
'oldfieldtype': 'Section Break',
'permlevel': 0,
@ -1300,7 +1317,7 @@
'doctype': 'DocField',
'fieldname': 'sales_partner',
'fieldtype': 'Link',
'idx': 79,
'idx': 80,
'in_filter': 1,
'label': 'Sales Partner',
'oldfieldname': 'sales_partner',
@ -1318,7 +1335,7 @@
'doctype': 'DocField',
'fieldname': 'commission_rate',
'fieldtype': 'Currency',
'idx': 80,
'idx': 81,
'label': 'Commission Rate',
'oldfieldname': 'commission_rate',
'oldfieldtype': 'Currency',
@ -1333,7 +1350,7 @@
'doctype': 'DocField',
'fieldname': 'total_commission',
'fieldtype': 'Currency',
'idx': 81,
'idx': 82,
'label': 'Total Commission',
'oldfieldname': 'total_commission',
'oldfieldtype': 'Currency',
@ -1347,7 +1364,7 @@
'doctype': 'DocField',
'fieldname': 'sales_team',
'fieldtype': 'Table',
'idx': 82,
'idx': 83,
'label': 'Sales Team1',
'oldfieldname': 'sales_team',
'oldfieldtype': 'Table',
@ -1361,7 +1378,7 @@
'allow_on_submit': 1,
'doctype': 'DocField',
'fieldtype': 'Button',
'idx': 83,
'idx': 84,
'label': 'Repair Sales Order',
'oldfieldtype': 'Button',
'options': 'repair_sales_order',

View File

@ -13,7 +13,7 @@ class DocType:
for r in res:
ret[cstr(r[0])]=r[1] and cstr(r[1]) or ''
return str(ret)
return ret
def set_cp_value(self, key):
"""

View File

@ -40,15 +40,10 @@ class DocType(TransactionBase):
def validate_fiscal_year(self):
get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date')
# ******************* Get Customer Details ***********************
#def get_customer_details(self):
# sales_com_obj = get_obj('Sales Common')
# sales_com_obj.get_customer_details(self)
# sales_com_obj.get_shipping_details(self)
# ****** Get contact person details based on customer selected ****
def get_contact_details(self):
return cstr(get_obj('Sales Common').get_contact_details(self,0))
return get_obj('Sales Common').get_contact_details(self,0)
# *********** Get Commission rate of Sales Partner ****************
def get_comm_rate(self, sales_partner):
@ -122,7 +117,7 @@ class DocType(TransactionBase):
ret = {
'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0
}
return cstr(ret)
return ret
# OTHER CHARGES TRIGGER FUNCTIONS

View File

@ -3,16 +3,16 @@
# These values are common in all dictionaries
{
'creation': '2010-08-08 17:08:57',
'creation': '2011-04-18 15:58:20',
'docstatus': 0,
'modified': '2011-06-27 16:42:01',
'modified': '2011-08-09 17:10:45',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all DocType
{
'_last_update': '1309173122',
'_last_update': '1311621379',
'colour': 'White:FFF',
'doctype': 'DocType',
'document_type': 'Transaction',
@ -27,7 +27,7 @@
'show_in_menu': 0,
'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed',
'tag_fields': 'billing_status',
'version': 444
'version': 446
},
# These values are common for all DocField
@ -70,15 +70,15 @@
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 2,
'permlevel': 1,
'role': 'Material User',
'submit': 0,
'write': 0
'permlevel': 0,
'role': 'Sales User',
'submit': 1,
'write': 1
},
# DocPerm
@ -89,22 +89,22 @@
'doctype': 'DocPerm',
'idx': 3,
'permlevel': 0,
'role': 'Material Manager',
'role': 'Material Master Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'amend': 1,
'cancel': 1,
'create': 1,
'doctype': 'DocPerm',
'idx': 4,
'permlevel': 1,
'permlevel': 0,
'role': 'Material Manager',
'submit': 0,
'write': 0
'submit': 1,
'write': 1
},
# DocPerm
@ -115,60 +115,25 @@
'doctype': 'DocPerm',
'idx': 5,
'permlevel': 0,
'role': 'Sales User',
'role': 'Sales Manager',
'submit': 1,
'write': 1
},
# DocPerm
{
'amend': 0,
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 6,
'permlevel': 1,
'role': 'Sales User',
'submit': 0,
'write': 0
'role': 'All'
},
# DocPerm
{
'cancel': 0,
'create': 0,
'doctype': 'DocPerm',
'idx': 7,
'permlevel': 0,
'role': 'Accounts User',
'submit': 0,
'write': 0
},
# DocPerm
{
'doctype': 'DocPerm',
'idx': 8,
'permlevel': 1,
'role': 'Accounts User'
},
# DocPerm
{
'doctype': 'DocPerm',
'idx': 9,
'match': 'customer_name',
'permlevel': 0,
'role': 'Customer'
},
# DocPerm
{
'doctype': 'DocPerm',
'idx': 10,
'permlevel': 2,
'role': 'All',
'write': 1
'role': 'All'
},
# DocField
@ -332,7 +297,7 @@
'permlevel': 0,
'print_hide': 0,
'reqd': 1,
'search_index': 0,
'search_index': 1,
'width': '100px'
},
@ -352,7 +317,7 @@
'permlevel': 1,
'print_hide': 1,
'reqd': 1,
'search_index': 0,
'search_index': 1,
'width': '150px'
},
@ -366,13 +331,13 @@
'fieldtype': 'Currency',
'idx': 15,
'in_filter': 1,
'label': '% Qty Billed',
'label': '% Amount Billed',
'no_copy': 1,
'oldfieldname': 'per_billed',
'oldfieldtype': 'Currency',
'permlevel': 1,
'print_hide': 1,
'search_index': 0
'search_index': 1
},
# DocField
@ -391,7 +356,7 @@
'oldfieldtype': 'Currency',
'permlevel': 1,
'print_hide': 1,
'search_index': 0
'search_index': 1
},
# DocField
@ -439,7 +404,7 @@
'permlevel': 0,
'print_hide': 1,
'reqd': 1,
'search_index': 0
'search_index': 1
},
# DocField
@ -453,7 +418,7 @@
'options': 'Customer Group',
'permlevel': 0,
'print_hide': 1,
'search_index': 0
'search_index': 1
},
# DocField
@ -1014,7 +979,7 @@
'permlevel': 0,
'print_hide': 1,
'reqd': 1,
'search_index': 0,
'search_index': 1,
'width': '150px'
},
@ -1032,7 +997,7 @@
'permlevel': 0,
'print_hide': 1,
'reqd': 1,
'search_index': 0,
'search_index': 1,
'width': '150px'
},

View File

@ -27,7 +27,7 @@ class DocType:
ret = {
'tax_rate' : rate and flt(rate[0][0]) or 0
}
return str(ret)
return ret
def on_update(self):
bin = sql("select stock_uom from `tabBin` where item_code = '%s' " % self.doc.item_code)

View File

@ -42,18 +42,15 @@ class DocType(TransactionBase):
#-----------------Validation For Fiscal Year------------------------
def validate_fiscal_year(self):
get_obj(dt = 'Purchase Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Transaction Date')
# Get Supplier Details
#def get_supplier_details(self, name = ''):
# return cstr(get_obj(dt='Purchase Common').get_supplier_details(name))
# Get Item Details
def get_item_details(self, arg = ''):
return cstr(get_obj(dt='Purchase Common').get_item_details(self,arg))
return get_obj(dt='Purchase Common').get_item_details(self,arg)
# Get UOM Details
def get_uom_details(self, arg = ''):
return cstr(get_obj(dt='Purchase Common').get_uom_details(arg))
return get_obj(dt='Purchase Common').get_uom_details(arg)
# GET TERMS & CONDITIONS
# =====================================================================================
@ -62,7 +59,7 @@ class DocType(TransactionBase):
# get available qty at warehouse
def get_bin_details(self, arg = ''):
return cstr(get_obj(dt='Purchase Common').get_bin_details(arg))
return get_obj(dt='Purchase Common').get_bin_details(arg)f
# Pull Purchase Order
def get_po_details(self):

View File

@ -38,7 +38,7 @@ class DocType:
def get_item_details(self, name):
det = sql("select description, stock_uom from `tabItem` where name = '%s' " % cstr(name))
rate = sql("select ref_rate from `tabRef Rate Detail` where price_list_name = %s and parent = %s and ref_currency = %s", (self.doc.price_list, name, self.doc.currency))
return cstr({'description' : det and det[0][0] or '', 'uom': det and det[0][1] or '', 'rate': rate and flt(rate[0][0]) or 0.00})
return {'description' : det and det[0][0] or '', 'uom': det and det[0][1] or '', 'rate': rate and flt(rate[0][0]) or 0.00}
def get_main_item(self):

View File

@ -54,7 +54,7 @@ class DocType:
'conversion_factor' : 1,
'batch_no' : ''
}
return str(ret)
return ret
# Get UOM Details
@ -70,7 +70,7 @@ class DocType:
'conversion_factor' : flt(uom[0]['conversion_factor']),
'transfer_qty' : flt(arg['qty']) * flt(uom[0]['conversion_factor']),
}
return str(ret)
return ret
# get stock and incoming rate on posting date
@ -396,7 +396,7 @@ class DocType:
'customer_name' : res and res[0][1] or '',
'customer_address' : res and res[0][2] or ''}
return str(ret)
return ret
def get_cust_addr(self):
@ -405,7 +405,7 @@ class DocType:
'customer_name' : res and res[0][0] or '',
'customer_address' : res and res[0][1] or ''}
return str(ret)
return ret
@ -415,7 +415,7 @@ class DocType:
'supplier' : res and res[0][0] or '',
'supplier_name' :res and res[0][1] or '',
'supplier_address' : res and res[0][2] or ''}
return str(ret)
return ret
def get_supp_addr(self):
@ -423,4 +423,4 @@ class DocType:
ret = {
'supplier_name' : res and res[0][0] or '',
'supplier_address' : res and res[0][1] or ''}
return str(ret)
return ret

View File

@ -22,7 +22,7 @@ class DocType:
self.doc, self.doclist = d,dl
def get_stock_uom(self, item_code):
return cstr({'current_stock_uom': cstr(get_value('Item', item_code, 'stock_uom'))})
return {'current_stock_uom': cstr(get_value('Item', item_code, 'stock_uom'))}
def validate_mandatory(self):
if not cstr(self.doc.item_code):

View File

@ -27,37 +27,6 @@ class DocType(TransactionBase):
def autoname(self):
#self.doc.name = make_autoname('CI/' + self.doc.fiscal_year + '/.######')
self.doc.name = make_autoname(self.doc.naming_series + '.######')
#def get_customer_details(self):
# details = sql("select address, territory, customer_group, customer_name from `tabCustomer` where name = '%s' and docstatus != 2" %(self.doc.customer), as_dict = 1)
# if details:
# ret = {
# 'customer_address' : details and details[0]['address'] or '',
# 'customer_name' : details and details[0]['customer_name'] or '',
# 'territory' : details and details[0]['territory'] or '',
# 'customer_group' : details and details[0]['customer_group'] or ''
# }
# # ********** get primary contact details (this is done separately coz. , in case there is no primary contact thn it would not be able to fetch customer details in case of join query)
# contact_det = sql("select contact_name, contact_no, email_id from `tabContact` where customer_name = '%s' and is_customer = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(self.doc.customer), as_dict = 1)
# ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
# ret['contact_no'] = contact_det and contact_det[0]['contact_no'] or ''
# ret['email_id'] = contact_det and contact_det[0]['email_id'] or ''
#
# return cstr(ret)
# else:
# msgprint("Customer : %s does not exist in system." % (name))
# raise Exception
# Get customer's contact person details
# ==============================================================
#def get_contact_details(self):
# contact = sql("select contact_no, email_id from `tabContact` where contact_name = '%s' and customer_name = '%s' and docstatus != 2" %(self.doc.contact_person, self.doc.customer), as_dict = 1)
# ret = {
# 'contact_no' : contact and contact[0]['contact_no'] or '',
# 'email_id' : contact and contact[0]['email_id'] or ''
# }
# return str(ret)
#check if maintenance schedule already generated
#============================================
@ -66,7 +35,7 @@ class DocType(TransactionBase):
nm = nm and nm[0][0] or ''
if not nm:
return cstr('No')
return 'No'
def on_submit(self):
if session['user'] != 'Guest':

View File

@ -38,21 +38,8 @@ class DocType(TransactionBase):
'item_name': item and item[0]['item_name'] or '',
'description' : item and item[0]['description'] or ''
}
return str(ret)
#pull customer details
#-------------------------
#def get_customer_details(self):
# det = sql("select t1.customer_name,t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = %s and t1.name=t2.customer and t2.is_primary_contact = 'Yes'", self.doc.customer, as_dict=1)
#
# ret = {
# 'customer_name': det and det[0]['customer_name'] or '',
# 'address' : det and det[0]['address'] or '',
# 'territory': det and det[0]['territory'] or '',
# 'contact_person' : det and det[0]['contact_name'] or ''
# }
# return str(ret)
return ret
# generate maintenance schedule
#-------------------------------------
def generate_schedule(self):
@ -132,7 +119,7 @@ class DocType(TransactionBase):
count = period/365
ret = {'no_of_visits':count}
return str(ret)
return ret
def validate_maintenance_detail(self):
if not getlist(self.doclist, 'item_maintenance_detail'):

View File

@ -31,20 +31,7 @@ class DocType(TransactionBase):
'item_name' : item and item[0]['item_name'] or '',
'description' : item and item[0]['description'] or ''
}
return str(ret)
#get customer details
#-----------------------
#def get_customer_details(self):
# det = sql("select t1.customer_name,t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = %s and t1.name=t2.customer and t2.is_primary_contact = 'Yes'", self.doc.customer, as_dict=1)
#
# ret = {
# 'customer_name' : det and det[0]['customer_name'] or '',
# 'address' : det and det[0]['address'] or '',
# 'territory': det and det[0]['territory'] or '',
# 'contact_person' : det and det[0]['contact_name'] or ''
# }
# return str(ret)
return ret
# fetch details of resp Sales order or customer issue
#-----------------------------------------------------------