diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 4563532aa5c..9e0a4ebf397 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -78,35 +78,32 @@ cur_frm.cscript.hide_fields = function(doc, cdt, cdn) { 'source', 'cancel_reason', 'total_advance', 'gross_profit', 'gross_profit_percent', 'get_advances_received', 'advance_adjustment_details', 'sales_partner', 'commission_rate', - 'total_commission']; + 'total_commission', 'advances']; item_flds_normal = ['sales_order', 'delivery_note'] item_flds_pos = ['warehouse', 'serial_no', 'batch_no', 'actual_qty', 'delivered_qty'] if(cint(doc.is_pos) == 1) { hide_field(par_flds); - $(cur_frm.fields_dict.payments_section.row.wrapper).toggle(true); - $(cur_frm.fields_dict.advances.row.wrapper).toggle(false); + unhide_field('payments_section'); for(f in item_flds_normal) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal[f], false); for(f in item_flds_pos) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_pos[f], (doc.update_stock==1?true:false)); } else { + hide_field('payments_section'); unhide_field(par_flds); - $(cur_frm.fields_dict.payments_section.row.wrapper).toggle(false); - $(cur_frm.fields_dict.advances.row.wrapper).toggle(true); for(f in item_flds_normal) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_normal[f], true); for(f in item_flds_pos) cur_frm.fields_dict['entries'].grid.set_column_disp(item_flds_pos[f], false); } - if (doc.docstatus==1) $(cur_frm.fields_dict.recurring_invoice.row.wrapper).toggle(true); - else $(cur_frm.fields_dict.recurring_invoice.row.wrapper).toggle(false); + if (doc.docstatus==1) unhide_field('recurring_invoice'); + else hide_field('recurring_invoice'); - if(doc.customer) $(cur_frm.fields_dict.contact_section.row.wrapper).toggle(true); - else $(cur_frm.fields_dict.contact_section.row.wrapper).toggle(false); + if(doc.customer) unhide_field('contact_section'); + else hide_field('contact_section'); // India related fields var cp = wn.control_panel; if (cp.country == 'India') unhide_field(['c_form_applicable', 'c_form_no']); else hide_field(['c_form_applicable', 'c_form_no']); - } @@ -114,7 +111,6 @@ cur_frm.cscript.hide_fields = function(doc, cdt, cdn) { // ------- cur_frm.cscript.refresh = function(doc, dt, dn) { cur_frm.cscript.is_opening(doc, dt, dn); - cur_frm.cscript.hide_fields(doc, dt, dn); erpnext.hide_naming_series(); // Show / Hide button @@ -131,6 +127,8 @@ cur_frm.cscript.refresh = function(doc, dt, dn) { if(doc.outstanding_amount!=0) cur_frm.add_custom_button('Make Payment Entry', cur_frm.cscript.make_bank_voucher); } + cur_frm.cscript.hide_fields(doc, dt, dn); + } //fetch retail transaction related fields @@ -191,7 +189,7 @@ cur_frm.cscript.customer = function(doc,dt,dn,onload) { var args = onload ? 'onload':'' if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', args, callback); - if(doc.customer) unhide_field(['customer_address','contact_person', 'territory','customer_group']); + if(doc.customer) unhide_field('contact_section'); } @@ -231,7 +229,7 @@ cur_frm.cscript.debit_to = function(doc,dt,dn) { var callback = function(r,rt) { var doc = locals[cur_frm.doctype][cur_frm.docname]; if(doc.customer) $c_obj(make_doclist(dt,dn), 'get_default_customer_address', '', callback2); - if(doc.customer) unhide_field(['customer_address','contact_person','territory','customer_group']); + if(doc.customer) unhide_field('contact_section'); cur_frm.refresh(); } diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.txt b/erpnext/accounts/doctype/sales_invoice/sales_invoice.txt index b1368d1bc38..ad92d22e06d 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.txt +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.txt @@ -3,9 +3,9 @@ # These values are common in all dictionaries { - 'creation': '2012-07-13 11:57:13', + 'creation': '2012-07-18 16:02:44', 'docstatus': 0, - 'modified': '2012-07-16 16:25:11', + 'modified': '2012-09-07 11:56:59', 'modified_by': u'Administrator', 'owner': u'Administrator' }, @@ -55,6 +55,66 @@ 'name': u'Sales Invoice' }, + # DocPerm + { + 'amend': 0, + 'cancel': 0, + 'create': 0, + 'doctype': u'DocPerm', + 'permlevel': 1, + 'role': u'Accounts Manager', + 'submit': 0, + 'write': 0 + }, + + # DocPerm + { + 'amend': 1, + 'cancel': 1, + 'create': 1, + 'doctype': u'DocPerm', + 'permlevel': 0, + 'role': u'Accounts Manager', + 'submit': 1, + 'write': 1 + }, + + # DocPerm + { + 'amend': 1, + 'cancel': 1, + 'create': 1, + 'doctype': u'DocPerm', + 'permlevel': 0, + 'role': u'Accounts User', + 'submit': 1, + 'write': 1 + }, + + # DocPerm + { + 'amend': 0, + 'cancel': 0, + 'create': 0, + 'doctype': u'DocPerm', + 'permlevel': 1, + 'role': u'Accounts User', + 'submit': 0, + 'write': 0 + }, + + # DocPerm + { + 'amend': 0, + 'cancel': 0, + 'create': 0, + 'doctype': u'DocPerm', + 'permlevel': 0, + 'role': u'Customer', + 'submit': 0, + 'write': 0 + }, + # DocField { 'doctype': u'DocField', @@ -812,7 +872,7 @@ 'doctype': u'DocField', 'fieldname': u'write_off_outstanding_amount_automatically', 'fieldtype': u'Check', - 'label': u'Write Off Outstanding Amount Automatically', + 'label': u'Write Off Outstanding Amount', 'permlevel': 0, 'print_hide': 1 }, @@ -1487,6 +1547,7 @@ # DocField { 'allow_on_submit': 1, + 'colour': u'White:FFF', 'depends_on': u'eval:doc.convert_into_recurring_invoice==1', 'description': u'Start date of the invoice period', 'doctype': u'DocField', diff --git a/erpnext/patches/august_2012/reload_stock_ledger.py b/erpnext/patches/august_2012/reload_stock_ledger.py new file mode 100644 index 00000000000..d0ec9ee8899 --- /dev/null +++ b/erpnext/patches/august_2012/reload_stock_ledger.py @@ -0,0 +1,4 @@ +def execute(): + import webnotes + from webnotes.modules import reload_doc + reload_doc('stock', 'Report', 'Stock Ledger') \ No newline at end of file diff --git a/erpnext/patches/patch_list.py b/erpnext/patches/patch_list.py index 64c190f28c6..1eaa757b2f6 100644 --- a/erpnext/patches/patch_list.py +++ b/erpnext/patches/patch_list.py @@ -565,4 +565,12 @@ patch_list = [ 'patch_module': 'patches.august_2012', 'patch_file': 'remove_cash_flow_statement', }, -] \ No newline at end of file + { + 'patch_module': 'patches.august_2012', + 'patch_file': 'reload_stock_ledger', + }, + { + 'patch_module': 'patches.september_2012', + 'patch_file': 'stock_report_permissions_for_accounts', + }, +] diff --git a/erpnext/patches/september_2012/__init__.py b/erpnext/patches/september_2012/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/patches/september_2012/stock_report_permissions_for_accounts.py b/erpnext/patches/september_2012/stock_report_permissions_for_accounts.py new file mode 100644 index 00000000000..26af06b710f --- /dev/null +++ b/erpnext/patches/september_2012/stock_report_permissions_for_accounts.py @@ -0,0 +1,17 @@ +def execute(): + import webnotes + from webnotes.model.doc import addchild + from webnotes.model.code import get_obj + + for parent in ("Stock Ledger Entry", "Bin"): + existing = webnotes.conn.sql("""select role from `tabDocPerm` + where permlevel=0 and parent=%s""", (parent,)) + + if "Accounts Manager" not in map(lambda x: x[0], existing): + doctype_obj = get_obj("DocType", parent, with_children=1) + ch = addchild(doctype_obj.doc, "permissions", "DocPerm") + ch.permlevel = 0 + ch.role = "Accounts Manager" + ch.read = 1 + ch.save() + \ No newline at end of file diff --git a/erpnext/stock/Report/Stock Ledger/Stock Ledger.txt b/erpnext/stock/Report/Stock Ledger/Stock Ledger.txt new file mode 100644 index 00000000000..d0c5184bba5 --- /dev/null +++ b/erpnext/stock/Report/Stock Ledger/Stock Ledger.txt @@ -0,0 +1,26 @@ +# Report, Stock Ledger +[ + + # These values are common in all dictionaries + { + 'creation': '2012-09-06 18:47:05', + 'docstatus': 0, + 'modified': '2012-09-06 18:48:22', + 'modified_by': u'Administrator', + 'owner': u'Administrator' + }, + + # These values are common for all Report + { + 'doctype': 'Report', + 'json': u'{"filters":[["Stock Ledger Entry","is_cancelled","=","No"]],"columns":[["item_code","Stock Ledger Entry"],["warehouse","Stock Ledger Entry"],["posting_date","Stock Ledger Entry"],["posting_time","Stock Ledger Entry"],["actual_qty","Stock Ledger Entry"],["bin_aqat","Stock Ledger Entry"],["voucher_type","Stock Ledger Entry"],["voucher_no","Stock Ledger Entry"]],"sort_by":"Stock Ledger Entry.posting_date","sort_order":"desc","sort_by_next":"Stock Ledger Entry.posting_time","sort_order_next":"desc"}', + 'name': '__common__', + 'ref_doctype': u'Stock Ledger Entry' + }, + + # Report, Stock Ledger + { + 'doctype': 'Report', + 'name': u'Stock Ledger' + } +] \ No newline at end of file diff --git a/erpnext/utilities/page/todo/todo.py b/erpnext/utilities/page/todo/todo.py index 37f9295394e..f0de04ec9b1 100644 --- a/erpnext/utilities/page/todo/todo.py +++ b/erpnext/utilities/page/todo/todo.py @@ -49,7 +49,7 @@ def edit(arg=None): def delete(arg=None): name = webnotes.form_dict['name'] d = Document('ToDo', name) - if d and d.name: + if d and d.name and d.owner != webnotes.session['user']: notify_assignment(d) webnotes.conn.sql("delete from `tabToDo` where name = %s", name) diff --git a/public/js/all-app.js b/public/js/all-app.js index e5fb717dd80..f33df112f38 100644 --- a/public/js/all-app.js +++ b/public/js/all-app.js @@ -1043,9 +1043,8 @@ 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');}}}} wn.views.ReportViewPage=Class.extend({init:function(doctype,docname){this.doctype=doctype;this.docname=docname;this.page_name=wn.get_route_str();this.make_page();var me=this;wn.model.with_doctype(doctype,function(){me.make_report_view();if(docname){wn.model.with_doc('Report',docname,function(r){me.reportview.set_columns_and_filters(JSON.parse(locals['Report'][docname].json));me.reportview.run();});}else{me.reportview.run();}});},make_page:function(){this.page=wn.container.add_page(this.page_name);wn.ui.make_app_page({parent:this.page,single_column:true});wn.container.change_to(this.page_name);},make_report_view:function(){this.page.appframe.add_breadcrumb(locals.DocType[this.doctype].module);this.reportview=new wn.views.ReportView(this.doctype,this.docname,this.page)}}) wn.views.ReportView=wn.ui.Listing.extend({init:function(doctype,docname,page){var me=this;$(page).find('.layout-main').html('Loading Report...');this.import_slickgrid();$(page).find('.layout-main').empty();this.doctype=doctype;this.docname=docname;this.page=page;this.tab_name='`tab'+doctype+'`';this.setup();},import_slickgrid:function(){wn.require('js/lib/slickgrid/slick.grid.css');wn.require('js/lib/slickgrid/slick-default-theme.css');wn.require('js/lib/slickgrid/jquery.event.drag.min.js');wn.require('js/lib/slickgrid/slick.core.js');wn.require('js/lib/slickgrid/slick.grid.js');wn.dom.set_style('.slick-cell { font-size: 12px; }');},set_init_columns:function(){var columns=[['name'],['owner']];$.each(wn.meta.docfield_list[this.doctype],function(i,df){if(df.in_filter&&df.fieldname!='naming_series'&&df.fieldtype!='Table'){columns.push([df.fieldname]);}});this.columns=columns;},setup:function(){var me=this;this.make({title:'Report: '+(this.docname?(this.doctype+' - '+this.docname):this.doctype),appframe:this.page.appframe,method:'webnotes.widgets.doclistview.get',get_args:this.get_args,parent:$(this.page).find('.layout-main'),start:0,page_length:20,show_filters:true,new_doctype:this.doctype,allow_delete:true,});this.make_column_picker();this.make_sorter();this.make_export();this.set_init_columns();this.make_save();},set_columns_and_filters:function(opts){var me=this;if(opts.columns)this.columns=opts.columns;if(opts.filters)$.each(opts.filters,function(i,f){me.filter_list.add_filter(f[0],f[1],f[2],f[3]);});if(opts.sort_by)this.sort_by_select.val(opts.sort_by);if(opts.sort_order)this.sort_order_select.val(opts.sort_order);if(opts.sort_by_next)this.sort_by_next_select.val(opts.sort_by_next);if(opts.sort_order_next)this.sort_order_next_select.val(opts.sort_order_next);},get_args:function(){var me=this;return{doctype:this.doctype,fields:$.map(this.columns,function(v){return me.get_full_column_name(v)}),order_by:this.get_order_by(),filters:this.filter_list.get_filters(),docstatus:['0','1','2']}},get_order_by:function(){var order_by=this.get_selected_table_and_column(this.sort_by_select) -+' '+this.sort_order_select.val() -if(this.sort_by_next_select.val()){order_by+=', '+this.get_selected_table_and_column(this.sort_by_next_select) -+' '+this.sort_order_next_select.attr("fieldname")} ++' '+this.sort_order_select.val();if(this.sort_by_next_select.val()){order_by+=', '+this.get_selected_table_and_column(this.sort_by_next_select) ++' '+this.sort_order_next_select.val();} return order_by;},get_selected_table_and_column:function($select){return this.get_full_column_name([$select.find('option:selected').attr('fieldname'),$select.find('option:selected').attr('table')])},get_full_column_name:function(v){return(v[1]?('`tab'+v[1]+'`'):this.tab_name)+'.'+v[0];},build_columns:function(){var me=this;return $.map(this.columns,function(c){var docfield=wn.meta.docfield_map[c[1]||me.doctype][c[0]];coldef={id:c[0],field:c[0],docfield:docfield,name:(docfield?docfield.label:toTitle(c[0])),width:(docfield?cint(docfield.width):120)||120} if(c[0]=='name'){coldef.formatter=function(row,cell,value,columnDef,dataContext){return repl("%(name)s",{doctype:me.doctype,name:value});}}else if(docfield&&docfield.fieldtype=='Link'){coldef.formatter=function(row,cell,value,columnDef,dataContext){if(value){return repl("%(name)s",{doctype:columnDef.docfield.options,name:value});}else{return'';}}} return coldef;});},render_list:function(){var me=this;var columns=[{id:'_idx',field:'_idx',name:'Sr.',width:40}].concat(this.build_columns());$.each(this.data,function(i,v){v._idx=i+1;});var options={enableCellNavigation:true,enableColumnReorder:false};var grid=new Slick.Grid(this.$w.find('.result-list').css('border','1px solid grey').css('height','500px').get(0),this.data,columns,options);},make_column_picker:function(){var me=this;this.column_picker=new wn.ui.ColumnPicker(this);this.page.appframe.add_button('Pick Columns',function(){me.column_picker.show(me.columns);},'icon-th-list');},make_sorter:function(){var me=this;this.sort_dialog=new wn.ui.Dialog({title:'Sorting Preferences'});$(this.sort_dialog.body).html('
Sort By
\ @@ -2147,7 +2146,7 @@ errprint('[set_field_tip] Unable to set field tip: '+n);}} refresh_field=function(n,docname,table_field){if(typeof n==typeof[])refresh_many(n,docname,table_field);if(table_field){if(_f.frm_dialog&&_f.frm_dialog.display){_f.frm_dialog.cur_frm.refresh_field(n);}else{var g=_f.cur_grid_cell;if(g)var hc=g.grid.head_row.cells[g.cellIndex];if(g&&hc&&hc.fieldname==n&&g.row.docname==docname){hc.template.refresh();}else{cur_frm.fields_dict[table_field].grid.refresh_cell(docname,n);}}}else if(cur_frm){cur_frm.refresh_field(n)}} set_field_options=function(n,txt){cur_frm.set_df_property(n,'options',txt)} set_field_permlevel=function(n,level){cur_frm.set_df_property(n,'permlevel',level)} -toggle_field=function(n,hidden){var df_obj=get_field_obj(n);var df=Meta.get_field(cur_frm.doctype,n,cur_frm.docname);if(df){if(df_obj.df.fieldtype==="Section Break"){$(df_obj.row.wrapper).toggle(hidden?false:true);}else if(df_obj.df.fieldtype==="Column Break"){$(df_obj.cell.wrapper).toggle(hidden?false:true);}else{df.hidden=hidden;refresh_field(n);}} +toggle_field=function(n,hidden){var df=Meta.get_field(cur_frm.doctype,n,cur_frm.docname);if(df){df.hidden=hidden;refresh_field(n);} else{console.log((hidden?"hide_field":"unhide_field")+" cannot find field "+n);}} hide_field=function(n){if(cur_frm){if(n.substr)toggle_field(n,1);else{for(var i in n)toggle_field(n[i],1)}}} unhide_field=function(n){if(cur_frm){if(n.substr)toggle_field(n,0);else{for(var i in n)toggle_field(n[i],0)}}}