Merge branch 'master' into stable
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
index e7fb676..edff465 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
@@ -18,8 +18,8 @@
if(!doc.voucher_date) set_multiple(dt,dn,{voucher_date:get_today()});
if(!doc.due_date) set_multiple(dt,dn,{due_date:get_today()});
if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
- if(!doc.currency && sys_defaults.currency) set_multiple(cdt,cdn,{currency:sys_defaults.currency});
- if(!doc.price_list_currency) set_multiple(cdt, cdn, {price_list_currency: doc.currency, plc_conversion_rate: 1});
+ if(!doc.currency && sys_defaults.currency) set_multiple(dt,dn,{currency:sys_defaults.currency});
+ if(!doc.price_list_currency) set_multiple(dt, dn, {price_list_currency: doc.currency, plc_conversion_rate: 1});
//for previously created sales invoice, set required field related to pos
if(doc.is_pos ==1) cur_frm.cscript.is_pos(doc, dt, dn);
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index a429b68..53304b0 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -53,7 +53,7 @@
call_back = function(doc, cdt, cdn){
cur_frm.cscript.calc_amount(doc, 2);
}
- str_arg = {'item_code':d.item_code, 'uom':d.uom, 'stock_qty':flt(d.stock_qty), 'qty': flt(d.qty)}
+ str_arg = {'item_code':d.item_code, 'uom':d.uom, 'stock_qty':flt(d.stock_qty), 'qty': flt(d.qty), 'conversion_rate':doc.conversion_rate}
// Updates Conversion Factor, Qty and Purchase Rate
get_server_fields('get_uom_details',JSON.stringify(str_arg), fname, doc,cdt,cdn,1, call_back);
// don't make mistake of calling update_stock_qty() the get_uom_details returns stock_qty as per conversion factor properly
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index 84bfffb..5bade92 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -165,8 +165,8 @@
'qty' : flt(arg['stock_qty']) / flt(uom[0]['conversion_factor']),
'purchase_ref_rate' : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])) or 0,
'purchase_rate' : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])) or 0,
- 'import_ref_rate' : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])/flt(self.doc.conversion_rate)) or 0,
- 'import_rate' : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])/flt(self.doc.conversion_rate)) or 0
+ 'import_ref_rate' : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])/flt(arg['conversion_rate'])) or 0,
+ 'import_rate' : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])/flt(arg['conversion_rate'])) or 0
}
return ret
diff --git a/erpnext/patches/delete_pur_of_service.py b/erpnext/patches/delete_pur_of_service.py
new file mode 100644
index 0000000..eecece6
--- /dev/null
+++ b/erpnext/patches/delete_pur_of_service.py
@@ -0,0 +1,4 @@
+def execute():
+ import webnotes
+ from webnotes.model import delete_doc
+ delete_doc('DocType', 'Purpose of Service')
diff --git a/erpnext/patches/pending_patches.py b/erpnext/patches/pending_patches.py
new file mode 100644
index 0000000..970af74
--- /dev/null
+++ b/erpnext/patches/pending_patches.py
@@ -0,0 +1,58 @@
+def execute():
+ import webnotes
+ from webnotes.model.code import get_obj
+ from webnotes.modules.module_manager import reload_doc
+ sql = webnotes.conn.sql
+
+ reload_doc('hr', 'doctype', 'appraisal')
+ reload_doc('hr', 'doctype', 'appraisal_detail')
+
+ sql("update `tabDocField` set `hidden` = 0 where fieldname = 'group_or_ledger' and parent = 'Cost Center'")
+ sql("update tabDocPerm set amend = 0 where parent = 'Salary Structure'")
+ sql("update tabDocPerm set cancel = 1 where parent = 'Company' and role = 'System Manager'")
+
+ if sql("select count(name) from `tabDocField` where label = 'View Ledger Entry' and parent = 'Journal Voucher' and fieldtype = 'Button'")[0][0] > 1:
+ sql("delete from `tabDocField` where label = 'View Ledger Entry' and parent = 'Journal Voucher' and fieldtype = 'Button' limit 1")
+ if sql("select count(name) from `tabDocField` where label = 'Get Balance' and parent = 'Journal Voucher' and fieldtype = 'Button'")[0][0] > 1:
+ sql("delete from `tabDocField` where label = 'Get Balance' and parent = 'Journal Voucher' and fieldtype = 'Button' limit 1")
+
+ reload_doc('accounts', 'doctype', 'internal_reconciliation')
+ reload_doc('accounts', 'doctype', 'ir_payment_detail')
+ reload_doc('accounts', 'Module Def', 'Accounts')
+
+
+
+ if sql("select count(name) from `tabDocField` where label = 'Get Specification Details' and parent = 'QA Inspection Report' and fieldtype = 'Button'")[0][0] > 1:
+ sql("delete from `tabDocField` where label = 'Get Specification Details' and parent = 'QA Inspection Report' and fieldtype = 'Button' limit 1")
+
+ reload_doc('stock', 'DocType Mapper', 'Purchase Order-Purchase Receipt')
+
+ reload_doc('accounts', 'doctype', 'cost_center')
+ reload_doc('stock', 'Module Def', 'Stock')
+ sql("delete from `tabModule Def Item` where display_name = 'Serial No' and parent = 'Support'")
+ sql("update `tabDocType` set subject = 'Item Code: %(item_code)s, Warehouse: %(warehouse)s' where name = 'Serial No'")
+
+ # Patch for adding packing related columns (packed by, checked by, shipping mark etc)
+ reload_doc('stock','doctype','delivery_note')
+ sql("update `tabDocField` set allow_on_submit = 1 where fieldname = 'page_break'")
+ sql("update `tabDocField` set allow_on_submit = 1 where fieldname in ('indent_details', 'po_details', 'purchase_receipt_details', 'entries', 'sales_order_details', 'delivery_note_details', 'quotation_details') and fieldtype = 'Table'")
+
+ from webnotes.session_cache import clear_cache
+ clear_cache(webnotes.session['user'])
+
+ # FEATURES SETUP
+ #----------------
+ reload_doc('setup', 'doctype','features_setup')
+ flds = ['page_break', 'projects', 'packing_details', 'discounts', 'brands', 'item_batch_nos', 'after_sales_installations', 'item_searial_nos', 'item_group_in_details', 'exports', 'imports', 'item_advanced', 'sales_extras', 'more_info', 'quality', 'manufacturing', 'pos', 'item_serial_nos']
+ st = "'"+"', '".join(flds)+"'"
+ sql("delete from `tabSingles` where field in (%s) and doctype = 'Features Setup'" % st)
+ sql("delete from `tabDocField` where fieldname in (%s) and parent = 'Features Setup'" % st)
+ sql("delete from `tabDefaultValue` where defkey in (%s) and parent = 'Control Panel'" % st)
+
+ if not sql("select * from `tabDefaultValue` where defkey like 'fs_%' and parent = 'Control Panel'"):
+ rs = sql("select fieldname from tabDocField where parent='Features Setup' and fieldname is not null")
+ fs = get_obj('Features Setup', 'Features Setup')
+ for d in rs:
+ fs.doc.fields[d[0]] = 1
+ fs.doc.save()
+ fs.validate()
diff --git a/erpnext/patches/pos_setting_patch.py b/erpnext/patches/pos_setting_patch.py
new file mode 100644
index 0000000..c202ab7
--- /dev/null
+++ b/erpnext/patches/pos_setting_patch.py
@@ -0,0 +1,6 @@
+def execute():
+ import webnotes
+ webnotes.conn.sql("update `tabDocField` set `default` = 1 where fieldname = 'conversion_rate' and parent = 'POS Setting'")
+
+ from webnotes.model import delete_doc
+ delete_doc('DocType', 'POS Settings')
diff --git a/erpnext/patches/reload_doctype.py b/erpnext/patches/reload_doctype.py
new file mode 100644
index 0000000..a63039a
--- /dev/null
+++ b/erpnext/patches/reload_doctype.py
@@ -0,0 +1,4 @@
+def execute():
+ import webnotes
+ from webnotes.modules.module_manager import reload_doc
+ reload_doc('core', 'doctype', 'doctype')
diff --git a/erpnext/patches/reload_po_pr_mapper.py b/erpnext/patches/reload_po_pr_mapper.py
new file mode 100644
index 0000000..c97f20c
--- /dev/null
+++ b/erpnext/patches/reload_po_pr_mapper.py
@@ -0,0 +1,4 @@
+def execute():
+ import webnotes
+ from webnotes.modules.module_manager import reload_doc
+ reload_doc('stock', 'DocType Mapper', 'Purchase Order-Purchase Receipt')
diff --git a/erpnext/projects/doctype/project_control/project_control.py b/erpnext/projects/doctype/project_control/project_control.py
index 4b382a5..ed192d2 100644
--- a/erpnext/projects/doctype/project_control/project_control.py
+++ b/erpnext/projects/doctype/project_control/project_control.py
@@ -130,6 +130,7 @@
msg2="""<h2>Two days to complete: %(name)s</h2>
<p>This is a reminder for the task %(name)s has been assigned to you
by %(senders_name)s on %(opening_date)s</p>
+ <p><b>Subject:</b> %(subject)s </p>
<p><b>Project:</b> %(project)s</p>
<p><b>Expected Start Date:</b> %(exp_start_date)s</p>
<p><b>Expected End Date:</b> %(exp_end_date)s</p>
diff --git a/erpnext/projects/doctype/ticket/ticket.py b/erpnext/projects/doctype/ticket/ticket.py
index 4dbcfe7..24c9750 100644
--- a/erpnext/projects/doctype/ticket/ticket.py
+++ b/erpnext/projects/doctype/ticket/ticket.py
@@ -97,6 +97,7 @@
'opening_date': self.doc.opening_date,
'exp_start_date': self.doc.exp_start_date,
'exp_end_date' : self.doc.exp_end_date,
+ 'subject' : self.doc.subject,
'project': self.doc.project,
'review_date': self.doc.review_date,
'description': self.doc.description
@@ -105,6 +106,7 @@
msg2="""<h2>%(name)s</h2>
<p>This is a Notification for the task %(name)s that has been assigned to you
by %(senders_name)s on %(opening_date)s</p>
+ <p><b>Subject:</b> %(subject)s </p>
<p><b>Project:</b> %(project)s</p>
<p><b>Review Date:</b> %(review_date)s</p>
<p><b>Expected Start Date:</b> %(exp_start_date)s</p>
diff --git a/erpnext/setup/doctype/manage_account/manage_account.py b/erpnext/setup/doctype/manage_account/manage_account.py
index 5dd2d06..5b1292a 100644
--- a/erpnext/setup/doctype/manage_account/manage_account.py
+++ b/erpnext/setup/doctype/manage_account/manage_account.py
@@ -42,16 +42,16 @@
def_list = [['fiscal_year',self.doc.current_fiscal_year],
['company',self.doc.default_company],
['currency',self.doc.default_currency],
- ['price_list_name',self.doc.default_price_list],
- ['price_list_currency', self.doc.default_price_list_currency],
- ['item_group',self.doc.default_item_group],
- ['customer_group',self.doc.default_customer_group],
- ['cust_master_name',self.doc.cust_master_name],
- ['supplier_type',self.doc.default_supplier_type],
+ ['price_list_name',self.doc.default_price_list or ''],
+ ['price_list_currency', self.doc.default_price_list_currency or ''],
+ ['item_group',self.doc.default_item_group or ''],
+ ['customer_group',self.doc.default_customer_group or ''],
+ ['cust_master_name',self.doc.cust_master_name or ''],
+ ['supplier_type',self.doc.default_supplier_type or ''],
['supp_master_name',self.doc.supp_master_name],
- ['territory',self.doc.default_territory],
- ['stock_uom',self.doc.default_stock_uom],
- ['fraction_currency',self.doc.default_currency_fraction],
+ ['territory',self.doc.default_territory or ''],
+ ['stock_uom',self.doc.default_stock_uom or ''],
+ ['fraction_currency',self.doc.default_currency_fraction or ''],
['valuation_method',self.doc.default_valuation_method]]
for d in def_list:
diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py
index c2594e3..2ad1236 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.py
+++ b/erpnext/setup/doctype/naming_series/naming_series.py
@@ -82,9 +82,12 @@
#-----------------------------------------------------------------------------------------------------------------------------------
def update_series_start(self):
- ser_det = sql("select name from `tabSeries` where name = %s", self.doc.prefix)
- if ser_det:
- sql("update `tabSeries` set current = '%s' where name = '%s'" % (self.doc.starts_from-1,self.doc.prefix))
+ if self.doc.prefix:
+ ser_det = sql("select name from `tabSeries` where name = %s", self.doc.prefix)
+ if ser_det:
+ sql("update `tabSeries` set current = '%s' where name = '%s'" % (self.doc.starts_from-1,self.doc.prefix))
+ else:
+ sql("insert into tabSeries (name, current) values (%s,%s)",(cstr(self.doc.prefix),cint(self.doc.starts_from)-1))
+ msgprint("Series Updated Successfully")
else:
- sql("insert into tabSeries (name, current) values (%s,%s)",(cstr(self.doc.prefix),cint(self.doc.starts_from)-1))
- msgprint("Series Updated Successfully")
+ msgprint("Please select prefix first")
diff --git a/erpnext/setup/page/setup/setup.js b/erpnext/setup/page/setup/setup.js
index f536c70..b3a195e 100644
--- a/erpnext/setup/page/setup/setup.js
+++ b/erpnext/setup/page/setup/setup.js
@@ -168,7 +168,7 @@
['Manage Trash',2,'Trash','','Restore trashed items'],
['Import Data',2,'Import Data','','Import data from CSV files'],
['Manage Users',2,'My Company','','Add / remove users and manage their roles'],
- ['Web Forms',2,'Webforms','', 'Code to embed forms in yor website'],
+ //['Web Forms',2,'Webforms','', 'Code to embed forms in yor website'],
['Permissions Manager',2,'Permission Engine','', 'Manage all permissions from one tool'],
//['Property Setter',1,'Property Setter','', 'Customize properties of a Form (DocType) or Field'],
['Customize Form View',3,'DocLayer','', 'Customize properties of a Form (DocType) or Field'],
@@ -235,8 +235,7 @@
this.buying = {'Buying':[['Supplier Type',1,'Supplier Type','','Manage supplier classifications'],
['Supplier',1,'Supplier','id'+NEWLINE+'supplier_type'+NEWLINE+'supplier_status'+NEWLINE+'company','Supplier master']]};
- this.maintenance = {'Maintenance':[['Serial No',1,'Serial No','item_code'+NEWLINE+'status'+NEWLINE+'pr_no'+NEWLINE+'delivery_note_no'+NEWLINE+'customer_name','Manage unique serial numbers for items'],
- ['Purpose of Service',1,'Purpose of Service','','Purpose of service master']]};
+ this.maintenance = {'Maintenance':[['Serial No',1,'Serial No','item_code'+NEWLINE+'status'+NEWLINE+'pr_no'+NEWLINE+'delivery_note_no'+NEWLINE+'customer_name','Manage unique serial numbers for items']]};
this.production = {'Production':[['Bill of Materials',1,'Bill Of Materials','id'+NEWLINE+'item'+NEWLINE+'description'+NEWLINE+'operating_cost'+NEWLINE+'maintained_by','Muti-level bill of materials and operations'],
['Workstation',1,'Workstation','id'+NEWLINE+'workstation_name'+NEWLINE+'warehouse'+NEWLINE+'description','Workstation master']]};
diff --git a/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt b/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
index ec3ff86..b26cd03 100644
--- a/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
+++ b/erpnext/stock/DocType Mapper/Purchase Order-Purchase Receipt/Purchase Order-Purchase Receipt.txt
@@ -5,7 +5,7 @@
{
'creation': '2010-08-08 17:09:35',
'docstatus': 0,
- 'modified': '2011-10-12 10:49:40',
+ 'modified': '2012-01-05 11:21:23',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
@@ -22,7 +22,6 @@
# These values are common for all Field Mapper Detail
{
'doctype': 'Field Mapper Detail',
- 'map': 'Yes',
'name': '__common__',
'parent': 'Purchase Order-Purchase Receipt',
'parentfield': 'field_mapper_details',
@@ -50,6 +49,7 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'supplier',
+ 'map': 'Yes',
'match_id': 0,
'to_field': 'supplier'
},
@@ -59,6 +59,7 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'company',
+ 'map': 'Yes',
'match_id': 0,
'to_field': 'company'
},
@@ -68,6 +69,7 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'currency',
+ 'map': 'Yes',
'match_id': 0,
'to_field': 'currency'
},
@@ -76,6 +78,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'name',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'prevdoc_detail_docname'
},
@@ -84,6 +87,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parent',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'prevdoc_docname'
},
@@ -92,6 +96,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'parenttype',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'prevdoc_doctype'
},
@@ -101,6 +106,7 @@
'checking_operator': '=',
'doctype': 'Field Mapper Detail',
'from_field': 'item_code',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'item_code'
},
@@ -109,6 +115,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) ',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'received_qty'
},
@@ -117,6 +124,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) ',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'qty'
},
@@ -125,6 +133,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.conversion_factor)',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'stock_qty'
},
@@ -133,6 +142,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.import_rate)',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'import_amount'
},
@@ -141,6 +151,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'eval:(flt(obj.qty) - flt(obj.received_qty)) * flt(obj.purchase_rate)',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'amount'
},
@@ -149,6 +160,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'schedule_date',
+ 'map': 'Yes',
'match_id': 1,
'to_field': 'schedule_date'
},
@@ -157,6 +169,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'net_total',
+ 'map': 'Yes',
'match_id': 0,
'to_field': 'net_total'
},
@@ -165,6 +178,7 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'grand_total',
+ 'map': 'Yes',
'match_id': 0,
'to_field': 'grand_total'
},
@@ -173,10 +187,20 @@
{
'doctype': 'Field Mapper Detail',
'from_field': 'total_tax',
+ 'map': 'Yes',
'match_id': 0,
'to_field': 'total_tax'
},
+ # Field Mapper Detail
+ {
+ 'doctype': 'Field Mapper Detail',
+ 'from_field': 'transaction_date',
+ 'map': 'No',
+ 'match_id': 0,
+ 'to_field': 'transaction_date'
+ },
+
# Table Mapper Detail
{
'doctype': 'Table Mapper Detail',
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index 881a176..6a228c1 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -307,7 +307,6 @@
# item re-order
# -------------
def reorder_item(self,doc_type,doc_name):
- msgprint(get_value('Manage Account', None, 'auto_indent'))
if get_value('Manage Account', None, 'auto_indent'):
#check if re-order is required
indent_detail_fields = sql("select re_order_level,item_name,description,brand,item_group,lead_time_days,min_order_qty,email_notify from tabItem where item_code = %s",(self.doc.item_code),as_dict=1)
@@ -331,7 +330,7 @@
indent_details_child.item_code = self.doc.item_code
indent_details_child.uom = self.doc.stock_uom
indent_details_child.warehouse = self.doc.warehouse
- indent_details_child.schedule_date= add_days(nowdate(),i['lead_time_days'])
+ indent_details_child.schedule_date= add_days(nowdate(),cint(i['lead_time_days']))
indent_details_child.item_name = i['item_name']
indent_details_child.description = i['description']
indent_details_child.item_group = i['item_group']
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 7399530..5cb4276 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -15,14 +15,14 @@
if(!doc.transaction_date) set_multiple(dt,dn,{transaction_date:get_today()});
if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
if(doc.__islocal && doc.customer) cur_frm.cscript.pull_item_details_onload(doc,dt,dn);
- if(!doc.price_list_currency) set_multiple(cdt, cdn, {price_list_currency: doc.currency, plc_conversion_rate: 1});
-
+ if(!doc.price_list_currency) {
+ set_multiple(dt, dn, {price_list_currency: doc.currency, plc_conversion_rate:1});
+}
if(!doc.posting_time) doc.posting_time = wn.datetime.get_cur_time()
if(doc.__islocal){
hide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
}
-
}
cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
@@ -34,7 +34,6 @@
// REFRESH
// ================================================================================================
cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-
cur_frm.clear_custom_buttons();
if(doc.per_billed < 100 && doc.docstatus==1) cur_frm.add_custom_button('Make Invoice', cur_frm.cscript['Make Sales Invoice']);
diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
index d5c90b5..c47ec22 100644
--- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
@@ -46,14 +46,15 @@
import datetime
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'):
self.validate_maintenance_detail()
- s_list =[]
+ s_list =[]
s_list = self.create_schedule_list(d.start_date, d.end_date, d.no_of_visits)
-
for i in range(d.no_of_visits):
child = addchild(self.doc,'maintenance_schedule_detail','Maintenance Schedule Detail',1,self.doclist)
child.item_code = d.item_code
+ child.item_name = d.item_name
child.scheduled_date = s_list[i].strftime('%Y-%m-%d')
if d.serial_no:
child.serial_no = d.serial_no
@@ -61,8 +62,51 @@
count = count+1
child.incharge_name = d.incharge_name
child.save(1)
+
self.on_update()
-
+
+
+
+ def on_submit(self):
+ if not getlist(self.doclist, 'maintenance_schedule_detail'):
+ msgprint("Please click on 'Generate Schedule' to get schedule")
+ raise Exception
+ self.check_serial_no_added()
+ self.validate_serial_no_warranty()
+ self.validate_schedule()
+
+ email_map ={}
+ for d in getlist(self.doclist, 'item_maintenance_detail'):
+ if d.serial_no:
+ self.update_amc_date(d.serial_no, d.end_date)
+
+ if d.incharge_name not in email_map:
+ e = sql("select email_id, name from `tabSales Person` where name='%s' " %(d.incharge_name),as_dict=1)[0]
+ email_map[d.incharge_name] = (e['email_id'])
+
+ scheduled_date =sql("select scheduled_date from `tabMaintenance Schedule Detail` \
+ where incharge_name='%s' and item_code='%s' and parent='%s' " %(d.incharge_name, \
+ d.item_code, self.doc.name), as_dict=1, debug=1)
+
+ for key in scheduled_date:
+ if email_map[d.incharge_name]:
+ self.add_calender_event(key["scheduled_date"],email_map[d.incharge_name],d.item_code)
+ set(self.doc, 'status', 'Submitted')
+
+
+ def add_calender_event(self,scheduled_date,incharge_email,item_code):
+ """ Add calendar event for Maintenece Schedule in calendar of Allocated person"""
+ event = Document('Event')
+ event.owner = incharge_email
+ event.description = "Item Code:%s and Reference:%s" %(item_code,self.doc.name)
+ event.event_date = scheduled_date
+ event.event_hour = '10:00'
+ event.event_type = 'Private'
+ event.ref_type = 'Maintenance Schedule'
+ event.ref_name = self.doc.name
+ event.save(1)
+
+
#get schedule dates
#----------------------
def create_schedule_list(self, start_date, end_date, no_of_visit):
@@ -97,6 +141,8 @@
msgprint("Weekly periodicity can be set for period of atleast 1 week or more")
raise Exception
+
+
#get count on the basis of periodicity selected
#----------------------------------------------------
def get_no_of_visits(self, arg):
@@ -121,6 +167,8 @@
ret = {'no_of_visits':count}
return ret
+
+
def validate_maintenance_detail(self):
if not getlist(self.doclist, 'item_maintenance_detail'):
msgprint("Please enter Maintaince Details first")
@@ -269,21 +317,15 @@
msgprint("Please click on 'Generate Schedule' to fetch serial no added for item "+m.item_code)
raise Exception
- def on_submit(self):
- if not getlist(self.doclist, 'maintenance_schedule_detail'):
- msgprint("Please click on 'Generate Schedule' to get schedule")
- raise Exception
- self.check_serial_no_added()
- self.validate_serial_no_warranty()
- self.validate_schedule()
- for d in getlist(self.doclist, 'item_maintenance_detail'):
- if d.serial_no:
- self.update_amc_date(d.serial_no, d.end_date)
- set(self.doc, 'status', 'Submitted')
-
+
def on_cancel(self):
for d in getlist(self.doclist, 'item_maintenance_detail'):
if d.serial_no:
self.update_amc_date(d.serial_no, '')
set(self.doc, 'status', 'Cancelled')
+ sql("delete from `tabEvent` where ref_type='Maintenance Schedule' and ref_name='%s' " %(self.doc.name))
+ def on_trash(self):
+ sql("delete from `tabEvent` where ref_type='Maintenance Schedule' and ref_name='%s' " %(self.doc.name))
+
+