restructured erpnext and deleted unwanted

This commit is contained in:
nabinhait
2011-07-01 13:34:41 +05:30
parent c1c54c9400
commit ec097975d0
1280 changed files with 54494 additions and 88652 deletions

View File

View File

View File

@@ -0,0 +1,55 @@
<div style="margin: 0px;">
<div id="fb_header">&nbsp;</div>
<!--
<table style="border: 1px solid #cccccc; width: 100%; background-color: #dfe1fd; vertical-align: middle; border-collapse: collapse;" border="0">
<tbody>
<tr>
<td style="width: 70%; padding-left: 8px;">
<h2>File Browser</h2>
</td>
<td style="width: 30%; text-align: right; padding-right: 8px; vertical-align: middle;"><span class="link_type" title="Close"> <img style="cursor:pointer" mce_style="cursor:pointer" onclick="nav_obj.show_last_open()" src="images/icons/close.gif" mce_src="images/icons/close.gif" alt="" /> </span></td>
</tr>
</tbody>
</table>
-->
<div style="width: 100%;">
<table style="border: 1px solid #cccccc; width: 100%; border-collapse: collapse;" border="0">
<tbody>
<tr>
<td style="border: 1px solid #cccccc; padding: 8px; width: 40%; border-collapse: collapse;">
<table style="width: 100%;" border="0">
<tbody>
<tr>
<td id="fb_gen_action" style="width: 100%; vertical-align: middle;">&nbsp;</td>
</tr>
<tr>
<td id="fb_tree_div" style="width: 100%; padding-top: 20px;">&nbsp;</td>
</tr>
</tbody>
</table>
</td>
<td style="border: 1px solid #cccccc; padding: 8px; width: 60%; border-collapse: collapse;">
<table style="width: 100%;" border="0">
<tbody>
<tr>
<td id="fb_file_action" style="width: 100%; vertical-align: middle;">&nbsp;</td>
</tr>
<tr>
<td id="fb_grp_action" style="width: 100%; vertical-align: middle;">&nbsp;</td>
</tr>
<tr>
<td id="fb_display_div" style="width: 100%; vertical-align: middle;">&nbsp;</td>
</tr>
<tr>
<td id="unselect">
<h2 style="color:#AAA">You have not selected anything.</h2>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>

View File

@@ -0,0 +1,992 @@
pscript['onload_File Browser'] = function(){
// header and toolbar
var h = new PageHeader('fb_header','File Management','Upload and share your file across users');
//$dh(h.toolbar); $y(h.toolbar,{width:'0px', height:'0px'})
if(!pscript.fb_tree)
pscript.create_browser_tree();
pscript.get_root_file_grps();
pscript.create_action_widget();
pscript.create_display_div();
pscript.create_n_file_grp_obj();
pscript.create_n_file_obj();
pscript.create_attach_obj();
pscript.get_all_roles();
$ds(pscript.gen_div);
$dh(pscript.grp_div);
$dh(pscript.file_div);
$ds($i('unselect'));
}
// Get all roles
pscript.get_all_roles = function(){
if(!pscript.fg_all_roles){
var callback = function(r,rt){
pscript.fg_all_roles = r.message ? r.message : '';
pscript.create_share_obj();
pscript.fg_share.make(r.message);
}
$c_obj('File Browser Control','get_all_roles','',callback);
}
}
// Creating File Browser tree.
pscript.create_browser_tree = function() {
$i('fb_tree_div').innerHTML = '';
var tree = new Tree($i('fb_tree_div'), '100%');
pscript.fb_tree = tree;
pscript.fb_tree.std_onclick = function(node) { /*pass*/ } // on click
pscript.fb_tree.std_onexp = function(node) { /*PASS*/ } // on expand
$ds(pscript.gen_div);
$dh(pscript.grp_div);
$dh(pscript.file_div);
$dh(pscript.f_file_display);
}
// Creating a Share Privilege object.
pscript.create_share_obj = function(){
var d = new Dialog(400,400,'Assign Privilege');
var me = d;
d.inputs = {};
d.make_body([
['HTML','Privilege','<div id="fg_share_div" style="overflow-y:auto; height:300px"></div>'],
['Button','Update']
]);
d.make = function(all_roles){
optn_header = make_table('fg_share_div',1,2,'100%',['60%','40%'],{padding:'4px'});
for(var c=0;c<2;c++){
if(c==1)
$td(optn_header,0,c).innerHTML = '<b>Privilege</b>';
else
$td(optn_header,0,c).innerHTML = '<b>Role</b>';
}
optn_tbl = make_table('fg_share_div',all_roles.length,2,'100%',['60%','40%'],{padding:'4px'});
for(var i=0;i<all_roles.length;i++){
var v=$a($td(optn_tbl, i,0),'div');
v.innerHTML=all_roles[i];
// make select
var sel = $a($td(optn_tbl, i,1),'select');
add_sel_options(sel,['None','Edit','View'],'None');
sel.r_nm = all_roles[i];
d.inputs[sel.r_nm] = sel;
sel.onchange = function(){}
}
}
// Assigning roles in Share Privilege object.
d.assign = function(all_roles,edit_roles,view_roles){
if(all_roles == undefined) all_roles = '';
if(edit_roles == undefined) edit_roles = '';
if(view_roles == undefined) view_roles = '';
for(var i=0;i<all_roles.length;i++){
var ele = all_roles[i];
var sel = me.inputs[ele];
if(in_list(edit_roles,ele))
sel.value = 'Edit';
else if(in_list(view_roles,ele))
sel.value = 'View';
else
sel.value = 'None';
}
}
//on update
d.widgets['Update'].onclick = function(){
var edit_roles = []; var view_roles = [];
for(var i=0;i<pscript.fg_all_roles.length;i++){
var ele = pscript.fg_all_roles[i]; var sel = me.inputs[ele];
if(sel_val(sel) == 'Edit')
edit_roles.push(ele)
else if(sel_val(sel) == 'View')
view_roles.push(ele)
}
var args = {}; args.name = pscript.f_cur_node_name; args.type = pscript.f_cur_node_type;
args.edit_roles = edit_roles.join(','); args.view_roles = view_roles.join(',');
$c_obj('File Browser Control','update_privileges',docstring(args),function(r,rt){me.hide();});
}
d.onshow = function(){}
d.onhide = function(){}
pscript.fg_share = d;
}
// Action Widget
pscript.create_action_widget = function(){
// General Actions.
// new action widget
pscript.gen_div = $i('fb_gen_action');
//refresh tree
f_refresh = $a(pscript.gen_div,'span','',{marginRight:'15px'});
f_refresh.innerHTML = '<img src="images/icons/page_refresh.gif" style="margin-right:5px; vertical-align:middle"/><span class="link_type" style="vertical-align:middle">Refresh</span>';
f_refresh.onclick = function(){
pscript.fb_refresh();
$dh(pscript.f_file_display);
}
// new group
f_new_grp = $a(pscript.gen_div,'span','',{marginRight:'15px'});
f_new_grp.innerHTML = '<img src="images/icons/folder.gif" style="margin-right: 5px; vertical-align:middle"><span class="link_type" style="vertical-align:middle">New</span>';
f_new_grp.onclick = function(){ pscript.fb_show_grp(''); $ds(pscript.f_file_display); $dh($i('unselect')); }
// Group actions.
pscript.grp_div = $i('fb_grp_action');
// share group
f_share_grp = $a(pscript.grp_div,'span','',{marginRight:'15px'});
f_share_grp.innerHTML = '<img src="images/icons/user.png" style="margin-right: 5px; vertical-align:middle"><span class="link_type" style="vertical-align:middle">Share</span>';
f_share_grp.onclick = function(){ pscript.fb_share(); }
//Delete group.
f_del_grp = $a(pscript.grp_div,'span','',{marginRight:'15px'});
f_del_grp.innerHTML = '<img src="images/icons/cancel.gif" style="margin-right: 5px; vertical-align:middle"><span class="link_type" style="vertical-align:middle">Delete</span>';
f_del_grp.onclick = function(){ pscript.fb_delete(); }
// Add file to group.
f_new_file = $a(pscript.grp_div,'span','',{marginRight:'15px'});
f_new_file.innerHTML = '<img src="images/icons/page_add.gif" style="margin-right: 5px; vertical-align:middle"><span class="link_type" style="vertical-align:middle">Upload</span>';
f_new_file.onclick = function(){ pscript.fb_create_new_file(); }
// $dh(f_new_file);
// file actions
pscript.file_div = $i('fb_file_action');
//share file
f_share_file = $a(pscript.file_div,'span','',{marginRight:'15px'});
f_share_file.innerHTML = '<img src="images/icons/user.png" style="margin-right: 5px; vertical-align:middle"><span class="link_type" style="vertical-align:middle">Share</span>';
f_share_file.onclick = function(){ pscript.fb_share(); };
// delete file
f_del_file = $a(pscript.file_div,'span','',{marginRight:'15px'});
f_del_file.innerHTML = '<img src="images/icons/cancel.gif" style="margin-right: 5px; vertical-align:middle"><span class="link_type" style="vertical-align:middle">Delete</span>';
f_del_file.onclick = function(){ pscript.fb_delete(); };
//edit file
f_edit_file = $a(pscript.file_div,'span','',{marginRight:'15px'});
f_edit_file.innerHTML = '<img src="images/icons/table_edit.png" style="margin-right: 5px; vertical-align:middle"><span class="link_type" style="vertical-align:middle">Edit</span>';
f_edit_file.onclick = function(){ pscript.fb_edit_file(); };
}
// Refresh tree
pscript.fb_refresh = function(){
pscript.create_browser_tree();
pscript.get_root_file_grps();
$ds(pscript.gen_div);
$dh(pscript.grp_div);
$dh(pscript.file_div);
if(!pscript.f_cur_node_name){ $dh($i('unselect')); } else{ $ds($i('unselect')); }
}
// Show selected / create a new file group.
pscript.fb_show_grp = function(grp){
var parent = pscript.f_file_display;
if(!grp || grp == undefined){
parent.f_file_title.innerHTML = 'New File Group';
pscript.n_file_grp.show('');
}
else{
var callback = function(r,rt){
var grp_det = r.message ? r.message : '';
parent.f_file_title.innerHTML = grp_det['Group Name'];
if(has_common(grp_det['Can Edit'].split(','),user_roles) || user==grp_det['Owner']){ $ds(pscript.grp_div); }
else{ $dh(pscript.grp_div); }
pscript.n_file_grp.show(grp_det);
}
$c_obj('File Browser Control','get_fg_details',grp,callback);
}
$ds(parent); $ds(parent.f_file_content);
}
//share privileges.
pscript.fb_share = function(){
var callback = function(r,rt){
pscript.fg_edit_roles = r.message[0][0] ? r.message[0][0].split(',') : '';
pscript.fg_view_roles = r.message[0][1] ? r.message[0][1].split(',') : '';
pscript.fg_share.assign(pscript.fg_all_roles,pscript.fg_edit_roles,pscript.fg_view_roles);
pscript.fg_share.show();
}
var args = {};
args.dt = pscript.f_cur_node_type;
args.dn = pscript.f_cur_node_name;
$c_obj('File Browser Control','get_privileges',docstring(args),callback);
}
// delete group
pscript.fb_delete = function(){
pscript.delete_node('File Browser Control',pscript.f_cur_node_type,pscript.f_cur_node_name,'');
$dh(pscript.f_file_display);
}
// Create a new file.
pscript.fb_create_new_file = function(){
var parent = pscript.f_file_display;
pscript.f_cur_parent = pscript.f_cur_node;
parent.f_file_title.innerHTML = 'New File';
pscript.n_file.show(0,'frm_node');
}
// If file other than image then download file.
pscript.fb_show_txt_file = function(){
$i('file_link').href = repl('cgi-bin/getfile.cgi?ac=%(acc)s&name=%(f_nm)s',{acc:session.account_name, f_nm:pscript.f_cur_node_file});
$i('file_link').target = "_blank";
}
// Area to display content.
pscript.create_display_div = function(){
var d = $a($i('fb_display_div'),'div');
d.f_file_title = $a(d,'div','',{fontSize:'14px',fontWeight:'bold'});
$y($a(d,'div'),{margin:'5px 0px 5px 0px',borderBottom:'1px solid #333'});
d.f_file_content = $a(d,'div','',{marginTop:'20px'});
pscript.f_file_display = d;
$dh(d);
}
// function to create a new File Group object.
pscript.create_n_file_grp_obj = function(){
var n_file_grp = new pscript.n_file_grp_Obj();
pscript.n_file_grp = n_file_grp;
}
// Create a new File object.
pscript.create_n_file_obj = function(){
var n_file = new pscript.n_file_Obj();
pscript.n_file = n_file;
}
// Create a new Attachement object.
pscript.create_attach_obj = function(){
var attach_obj = new pscript.attach_Obj();
pscript.attach_obj = attach_obj;
}
// File Group object.
pscript.n_file_grp_Obj = function() {
this.inputs = {}; var me = this; this.fg_field_lst = [];
this.make_section = function(label, tp, css) {
var div = $a(this.wrapper,'div','',{marginBottom:'8px'});
var t = make_table(div,1,2,'90%',['35%','65%']);
if(tp=='button'){
var element = $a($td(t,0,1), 'button', 'button');
element.innerHTML = label;
}
else if(tp == 'link'){
var element = make_field({fieldtype:'link', 'label':label, 'options':'File Group'}, '', $td(t,0,1), this, 0, 1);
$y($td(t,0,1),{width:'100%'})
element.in_filter = 1; element.refresh();
$td(t,0,0).innerHTML = label;
element.display_div = $a($td(t,0,1),'div', '', {width:'80%'});
me.fg_field_lst.push(label);
}
else {
var element = $a($td(t,0,1),tp, '', {width:'80%'});
$td(t,0,0).innerHTML = label;
element.display_div = $a($td(t,0,1),'div', '', {width:'80%'});
$dh(element.display_div);
me.fg_field_lst.push(label);
}
if(css){
$y($td(t,0,0),css);
}
element.wrapper = div;
if(label) me.inputs[label] = element;
return element;
}
this.make = function() {
this.wrapper = document.createElement('div');
this.make_section('Group Name','input',{color:'red'});
this.make_section('Parent Group','link');
this.make_section('Description','textarea');
$y(this.inputs['Description'],{height:'140px'});
this.make_section('Save','button');
// cancel
this.inputs['Cancel'] = $a(this.inputs['Save'].parentNode, 'button', 'button');
this.inputs['Cancel'].innerHTML = 'Cancel';
$y(this.inputs['Cancel'], {marginLeft:'8px'});
}
this.show = function(grp_det){
if(! me.wrapper) me.make();
var field_lst = me.fg_field_lst;
if(!grp_det || grp_det == undefined){
pscript.fg_edit_roles = ''; pscript.fg_view_roles = ''; me.inputs['Save'].disabled = false;
for(i in field_lst){
var fld_nm = field_lst[i] ? field_lst[i] : '';
var fld = me.inputs[fld_nm] ? me.inputs[fld_nm] : '';
fld.display_div.innerHTML = '';
if(fld_nm == 'Parent Group'){ fld.txt.value = ''; $ds(fld.input_area); }
else{ fld.value = ''; $ds(fld); }
$dh(fld.display_div);
}
me.inputs['Save'].onclick = function(){ me.save(''); }
}
else{
pscript.fg_edit_roles = grp_det['Can Edit'] ? grp_det['Can Edit'].split(',') : '';
pscript.fg_view_roles = grp_det['Can View'] ? grp_det['Can View'].split(',') : '';
for(i in field_lst){
var fld_nm = field_lst[i] ? field_lst[i] : '';
var fld = me.inputs[fld_nm] ? me.inputs[fld_nm] : '';
fld.display_div.innerHTML = grp_det[fld_nm] ? grp_det[fld_nm] : '';
if(fld_nm == 'Parent Group') fld.txt.value = grp_det[fld_nm] ? grp_det[fld_nm] : '';
else fld.value = grp_det[fld_nm] ? grp_det[fld_nm] : '';
if(has_common(pscript.fg_edit_roles,user_roles) || user == grp_det['Owner']){
if(fld_nm == 'Parent Group') $ds(fld.input_area); else $ds(fld);
$dh(fld.display_div); me.inputs['Save'].disabled = false;
}
else{
if(fld_nm == 'Parent Group') $dh(fld.input_area); else $dh(fld);
$ds(fld.display_div); me.inputs['Save'].disabled = true;
}
}
me.inputs['Save'].onclick = function(){ me.save(grp_det['Name']); }
}
me.show_as();
me.inputs['Cancel'].onclick = function() { me.cancel(); me.hide();}
}
this.save = function(name) {
var grp_nm = me.inputs['Group Name'].value; grp_nm = strip(grp_nm," ");
var parent_grp = me.inputs['Parent Group'].get_value(); parent_grp = strip(parent_grp," ");
var desc = me.inputs['Description'].value; desc = strip(desc," ");
if(grp_nm == '') msgprint('Please enter group name');
else{ var args = {}; args.grp_nm = grp_nm; args.parent_grp = parent_grp; args.desc = desc; }
if(!name || name == undefined){
args.name = '';
var callback = function(r,rt){
pscript.f_cur_node_name = r.message ? r.message : '';
pscript.fb_show_grp(pscript.f_cur_node_name);
pscript.fb_refresh();
//if(!pscript.f_cur_parent){ pscript.fb_refresh(); pscript.f_cur_node_name = }
//else{ pscript.load_child_nodes(); }
}
$c_obj('File Browser Control','create_new_grp',docstring(args),callback);
}
else{
args.name = name;
var callback = function(r,rt){
var grp = r.message ? r.message : '';
pscript.fb_show_grp(grp);
pscript.fb_refresh();
}
$c_obj('File Browser Control','update_grp',docstring(args),callback);
}
}
this.cancel = function(){
$dh(pscript.f_file_display);this.hide();
}
this.show_as = function() {
if(me.wrapper.parentNode) me.wrapper.parentNode.removeChild(me.wrapper);
var parent = pscript.f_file_display;
pscript.remove_child_nodes(parent.f_file_content);
parent.f_file_content.appendChild(me.wrapper);
$ds(pscript.f_file_display); $ds(me.wrapper);
}
this.hide = function() {
$dh(me.wrapper); me.display = 0;
}
}
// File Object.
pscript.n_file_Obj = function() {
this.inputs = {};
var me = this;
this.make_section = function(label, tp, css) {
var div = $a(this.wrapper,'div','',{marginBottom:'8px'});
var t = make_table(div,1,2,'90%',['38%','62%']);
if(tp=='button'){
var element = $a($td(t,0,1), 'button', 'button');
element.innerHTML = label;
}
else if(tp=='Note'){
var element = $a($td(t,0,1),'span','',{color:'red'});
element.innerHTML = 'Fields in red are mandatory.'
}
else if(tp=='link'){
var element = make_field({fieldtype:'link', 'label':label, 'options':'File Group'}, '', $td(t,0,1), this, 0, 1);
$y($td(t,0,1),{width:'100%'})
element.in_filter = 1; element.refresh();
$td(t,0,0).innerHTML = label;
element.display_div = $a($td(t,0,1),'div', '', {width:'80%'});
element.txt.onchange = function(){ pscript.set_file_det_value(pscript.attach_obj,pscript.n_file); }
}
else {
var element = $a($td(t,0,1),tp, '', {width:'95%'});
$td(t,0,0).innerHTML = label;
element.onchange = function(){ pscript.set_file_det_value(pscript.attach_obj,pscript.n_file); }
}
//---css to label---
if(css){
$y($td(t,0,0),css);
}
element.wrapper = div;
if(label) me.inputs[label] = element;
return element;
}
this.make = function() {
this.wrapper = document.createElement('div');
// note
this.make_section('','Note');
// upload area
this.ul_area = $a(this.wrapper,'div','',{marginBottom:'8px'});
$dh(this.ul_area);
// file group and description
this.make_section('File Group','link',{color:'red'});
this.make_section('Description','textarea');
$y(this.inputs['Description'],{height:'140px'});
//save
this.make_section('Save','button');$dh(this.inputs['Save']);
// cancel
this.inputs['Cancel'] = $a(this.inputs['Save'].parentNode, 'button', 'button');
this.inputs['Cancel'].innerHTML = 'Cancel'; $dh(this.inputs['Cancel']);
$y(this.inputs['Cancel'], {marginLeft:'8px'});
}
this.show = function(edit,frm){
if(! me.wrapper) me.make();
if(edit){
var callback1 = function(r,rt){
file_det = r.message;
me.inputs['Description'].value = file_det['description'] ? file_det['description'] : '';
me.inputs['File Group'].txt.value = file_det['file_group'] ? file_det['file_group'] : '';
pscript.f_cur_node_file = file_det['file_list'] ? file_det['file_list'].split(NEWLINE)[0].split(',')[1] : '';
me.inputs['Save'].file_id = file_det['name'] ? file_det['name'] : '';
me.inputs['Save'].onclick = function(){ me.save(this.file_id);}
pscript.attach_obj.show(me, me.ul_area, 1, file_det);
}
$ds(me.ul_area); $di(me.inputs['Save']); $di(me.inputs['Cancel']);
$c_obj('File Browser Control','get_file_details',pscript.f_cur_node_name,callback1);
}
else{
$ds(me.ul_area); $dh(me.inputs['Save']); $dh(me.inputs['Cancel']);
me.inputs['Description'].value = '';
if(frm == 'frm_node') me.inputs['File Group'].txt.value = pscript.f_cur_node_label;
var parent = pscript.f_file_display;
parent.f_file_title.innerHTML = 'New File';
$ds(parent);
me.inputs['Save'].onclick = function(){ me.save('');}
pscript.attach_obj.show(me,me.ul_area,0,'');
}
me.inputs['Cancel'].onclick = function() { me.cancel(); me.hide(); }
}
this.save = function(name) {
var desc = me.inputs['Description'].value; desc = strip(desc," ");
file_grp = me.inputs['File Group'].txt.value; file_grp = strip(file_grp," ");
if(file_grp == '') msgprint('Please select file group');
var args = {}; args.desc = desc; args.file_grp = file_grp;
if(name){
args.name = name;
var callback = function(){
//pscript.fb_edit_file();
//refreshing parent
pscript.load_child_nodes();
}
$c_obj('File Browser Control','update_file',docstring(args),callback);
}
else{
args.name = ''
var callback = function(r,rt){
var f = eval('var a='+r.message+';a');
//refreshing node
pscript.load_child_nodes();
//pscript.f_cur_node_name = f.name; pscript.f_cur_node_label = f.label;
//pscript.fb_edit_file();
}
$c_obj('File Browser Control','create_new_file',docstring(args),callback);
}
}
this.cancel = function(){
$dh(pscript.f_file_display); this.hide();
}
this.show_as = function(edit) {
if(me.wrapper.parentNode) me.wrapper.parentNode.removeChild(me.wrapper);
var parent = pscript.f_file_display;
pscript.remove_child_nodes(parent.f_file_content);
parent.f_file_content.appendChild(me.wrapper);
$ds(pscript.f_file_display); $ds(parent.f_file_content);
$ds(me.wrapper);
}
this.hide = function() {
$dh(me.wrapper);
me.display = 0;
}
}
// File Attachement object.
pscript.attach_Obj = function(){
var me = this;
this.show = function(obj,parent,edit,dict){
var me = this;
if(!me.wrapper) { me.make(); }
me.show_as(obj,parent,edit,dict);
obj.show_as(edit);
}
this.make = function(){
var me = this;
this.wrapper = document.createElement('div');
var div = $a(this.wrapper,'div',{marginBottom:'8px', border:'1px solid #AAA'});
var t1 = make_table(div,1,2,'90%',['38%','62%']);
lbl_area = $a($td(t1,0,0),'div');
lbl_area.innerHTML = '<img src="images/icons/paperclip.gif"><span style="margin-left4px; color:red;">File:</span><br>';
main_area = $a($td(t1,0,1),'div');
this.upload_div = $a(main_area,'div');
this.download_div = $a(main_area,'div');
me.make_ul_area();
me.make_dl_area();
}
//image upload area
this.make_ul_area = function(){
var me = this;
this.upload_div.innerHTML = '';
var div = $a(this.upload_div,'div');
div.innerHTML = '<iframe id="fb_iframe" name="fb_iframe" src="blank1.html" style="width:0px; height:0px; border:0px"></iframe>';
var div = $a(this.upload_div,'div');
div.innerHTML = '<form method="POST" enctype="multipart/form-data" action="'+outUrl+'" target="fb_iframe"></form>';
var ul_form = div.childNodes[0];
this.upload_div.ul_form = ul_form;
var f_list = [];
// file data
var inp_fdata = $a_input($a(ul_form,'span'),'file',{name:'filedata'});
var inp_btn = $a_input($a(ul_form,'span'),'hidden',{name:'cmd'}); inp_btn.value = 'upload_many';
var inp = $a_input($a(ul_form,'span'),'hidden',{name:'form_name'}); inp.value = 'File Browser';
var inp = $a_input($a(ul_form,'span'),'submit'); inp.value = 'Upload';
this.inp_file = $a_input($a(ul_form,'span'),'hidden',{name:'file_id'});
this.file_det = $a_input($a(ul_form,'span'),'hidden',{name:'file_det'});
inp_btn.onclick = function(){
pscript.set_file_det_value(pscript.attach_obj,pscript.n_file);
}
}
//download link
this.make_dl_area = function(){
var me = this;
var download_tbl = make_table(this.download_div,1,2,'100%',['70%','30%']);
var download_link = $a($td(download_tbl,0,0),'a','link_type');
this.download_div.download_link = download_link;
var remove_link = $a($td(download_tbl,0,1),'span','link_type',{textAlign:'right',marginLeft:'20px'});
remove_link.innerHTML = 'Remove';
this.download_div.remove_link = remove_link;
}
this.show_as = function(obj,parent,edit,dict){
var me = this;
// add to parent
if(me.wrapper.parentNode) me.wrapper.parentNode.removeChild(me.wrapper);
parent.appendChild(me.wrapper);
$ds(me.wrapper);
if(edit){
pscript.set_file_det_value(pscript.attach_obj,pscript.n_file);
me.inp_file.value = dict.name ? dict.name : '';
if(dict.file_list){ $dh(me.upload_div); $ds(me.download_div); }
else{ $ds(me.upload_div); $dh(me.download_div); }
// download
me.download_div.download_link.innerHTML = dict.file_list ? dict.file_list.split(',')[0] : '';
me.download_div.download_link.onclick = function(){
this.href = repl('cgi-bin/getfile.cgi?ac=%(acc)s&name=%(f_nm)s',{acc:session.account_name, f_nm:pscript.f_cur_node_file});
this.target = "_blank";
}
// remove
me.download_div.remove_link.onclick = function(){
$c_obj('File Browser Control','remove_file',docstring(dict),function(r,rt){
pscript.n_file.show(0,'frm_remove');
});
$ds(me.upload_div); $dh(me.download_div);
}
}
else{
$ds(me.upload_div); $dh(me.download_div);
me.inp_file.value = '';
pscript.set_file_det_value(pscript.attach_obj,pscript.n_file);
}
}
}
// Get all root file groups(where Parent Group is null).
pscript.get_root_file_grps = function(){
if (pscript.fb_tree){
pscript.fb_tree.body.innerHTML = '';
}
var callback1 = function(r,rt){
var cl = r.message ? r.message : ''; var n = pscript.fb_tree.allnodes[cl]; var has_children = true;
for(var i=0; i<cl.length;i++){
if(!cl[i][2] || cl[i][2] == undefined) cl[i][2] = ''; if(!cl[i][3] || cl[i][3] == undefined) cl[i][3] = '';
if(has_common(cl[i][2].split(','),user_roles) || has_common(cl[i][3].split(','),user_roles) || user == cl[i][4]){
var r = pscript.fb_tree.addNode(null, cl[i][0],'', pscript.show_hide_link , has_children ? pscript.fb_get_children : null, null, cl[i][1]);
r.rec = cl[i]; r.rec.name = cl[i][0]; r.rec.label = cl[i][1]; r.rec.parent_grp = ''; r.rec.file_list = ''; r.rec.type = 'File Group';
}
}
}
$c_obj('File Browser Control','get_root_file_grps','',callback1);
}
// Onclick of a tree node will show / hide corresponding actions from action widget.
pscript.show_hide_link = function(node){
$dh($i('unselect'));
$dh(pscript.f_file_display);
pscript.f_cur_node = node;
if(node.parent){
pscript.f_cur_parent = node.parent;
}
else{ pscript.f_cur_parent = ''; }
pscript.f_cur_node_name = node.rec.name;
if(node.rec.label){ pscript.f_cur_node_label = node.rec.label; }
else{ pscript.f_cur_node_label = ''; }
if(node.rec.type){ pscript.f_cur_node_type = node.rec.type; }
else{ pscript.f_cur_node_type = ''; }
if(node.rec.file_list){ pscript.f_cur_node_file = node.rec.file_list.split(NEWLINE)[0].split(',')[1]; }
else{ pscript.f_cur_node_file = ''; }
img_extns = ['jpg','jpeg','gif','png','biff','cgm','dpof','exif','img','mng','pcx','pic','pict','raw','tga','wmf']
extn = node.rec.file_list ? node.rec.file_list.split(NEWLINE)[0].split(',')[0].split('.')[1] : '';
var dsp_div = pscript.f_file_display;
dsp_div.f_file_title.innerHTML = pscript.f_cur_node_label;
if(node.rec.type == 'File Group'){
$dh(pscript.file_div);
$ds(pscript.grp_div);
pscript.fb_show_grp(pscript.f_cur_node_name);
}
else if(node.rec.type == 'File'){
$dh(pscript.grp_div);
$ds(pscript.file_div);
if(pscript.f_cur_node_file){
if(inList(img_extns,extn)){
pscript.fb_show_img();
}
else{
// IE FIX
pscript.remove_child_nodes(dsp_div.f_file_content);
var div = document.createElement('div');
div.innerHTML = '<a class="link_type" onclick="pscript.fb_show_txt_file()" id="file_link">Click to Open/ Download file.</span>';
dsp_div.f_file_content.appendChild(div);
$ds(dsp_div);
}
}
else{
dsp_div.f_file_content.innerHTML = 'No attachement found.';
$ds(pscript.f_file_display);
$ds(pscript.file_div);
$dh(pscript.grp_div);
}
pscript.show_edit_file_link(node.rec.name);
}
else{
$dh(pscript.grp_div);
$dh(pscript.file_div);
}
}
// Onexpand of a tree node get all childrens(Files / File Groups).
pscript.fb_get_children = function(node){
if(node.expanded_once) return;
$ds(node.loading_div);
var callback = function(r,rt){
var p = pscript.fb_tree.allnodes[r.message.parent_grp];
$dh(node.loading_div);
var fl = r.message.fl ? r.message.fl : '';
if(fl){
for(var i=0; i<fl.length; i++){
if(fl[i][3] == undefined) fl[i][3] = '';
if(fl[i][4] == undefined) fl[i][4] = '';
if(has_common(fl[i][3].split(','),user_roles) || has_common(fl[i][4].split(','),user_roles) || (user == fl[i][5])){
var imgsrc = 'images/icons/page.gif'; var has_children = false;
if(fl[i][1]) var label = fl[i][1]; else var label = fl[i][0];
var n = pscript.fb_tree.addNode(p,fl[i][0],imgsrc,pscript.show_hide_link,has_children ? pscript.fb_get_children:null,null,label);
n.rec = fl[i]; n.rec.name = fl[i][0]; n.rec.parent_grp = r.message.parent_grp;
n.rec.label = fl[i][1]; n.rec.file_list = fl[i][2]; n.rec.type = 'File';
}
}
}
var fl_grp = r.message.fl_grp ? r.message.fl_grp : '';
if(fl_grp){
for(var i=0;i<fl_grp.length;i++){
if(fl_grp[i][2] == undefined) fl_grp[i][2] = '';
if(fl_grp[i][3] == undefined) fl_grp[i][3] = '';
if(has_common(fl_grp[i][2].split(','),user_roles) || has_common(fl_grp[i][3].split(','),user_roles) || (user == fl_grp[i][4])){
var imgsrc = 'images/icons/folder.gif'; var has_children = true;
var label = fl_grp[i][1] ? fl_grp[i][1] : fl_grp[i][0];
var n = pscript.fb_tree.addNode(p,fl_grp[i][0],imgsrc,pscript.show_hide_link,has_children ? pscript.fb_get_children:null,null,label);
n.rec = fl_grp[i]; n.rec.name = fl_grp[i][0]; n.rec.parent_grp = r.message.parent_grp;
n.rec.label = fl_grp[i][1]; n.rec.file_list = ''; n.rec.type='File Group';
}
}
}
}
$c_obj('File Browser Control','get_children',node.rec.name,callback);
}
// If image file then display image.
pscript.fb_show_img = function(){
var parent = pscript.f_file_display;
parent.f_file_title.innerHTML = pscript.f_cur_node_label;
pscript.remove_child_nodes(parent.f_file_content);
var a = $a(parent.f_file_content,'a');
var img = $a(a,'img','',{textAlign:'center',cursor:'pointer'});
img.src = repl('cgi-bin/getfile.cgi?ac=%(acc)s&name=%(f_nm)s&thumbnail=300',{acc:session.account_name, f_nm:pscript.f_cur_node_file});
$ds(pscript.f_file_display);
a.onclick = function(){
this.href = repl('cgi-bin/getfile.cgi?ac=%(acc)s&name=%(f_nm)s',{acc:session.account_name, f_nm:pscript.f_cur_node_file});
this.target = "_blank";
}
}
// Enable/ disable Edit File action.
pscript.show_edit_file_link = function(){
var callback = function(r,rt){
pscript.f_edit_roles = r.message[0][0] ? r.message[0][0].split(',') : '';
pscript.f_view_roles = r.message[0][1] ? r.message[0][1].split(',') : '';
if(has_common(pscript.f_edit_roles,user_roles) || user == r.message[0][2]){
$ds(pscript.file_div);
}
else{ $dh(pscript.file_div); }
}
var args = {};
args.dt = pscript.f_cur_node_type;
args.dn = pscript.f_cur_node_name;
$c_obj('File Browser Control','get_privileges',docstring(args),callback);
}
// Set file detail in attachement object.
pscript.set_file_det_value = function(att,file){
if(file.inputs['Description'].value) file_desc = file.inputs['Description'].value; else file_desc = 'NIL';
if(file.inputs['File Group'].txt.value) file_grp = file.inputs['File Group'].txt.value; else file_grp = 'NIL';
att.file_det.value = file_desc + '~~' + file_grp;
}
// Edit selected file.
pscript.fb_edit_file = function(){
var parent = pscript.f_file_display;
parent.f_file_title.innerHTML = pscript.f_cur_node_label;
pscript.n_file.show(1,'frm_node');
}
//delete dialog structure
pscript.delete_node = function(sdt,dt,dn,callback){
if(!pscript.delete_dialog){
var delete_dialog = new Dialog(400,200);
delete_dialog.make_body([
['HTML','Message',''],
['HTML','Response',''],
['HTML','Delete Record','<div id="delete_record" style="height:25px"></div>']
]);
delete_dialog.y_btn = $a($i('delete_record'),'button','button');
delete_dialog.y_btn.innerHTML = 'Ok';
delete_dialog.y_btn.onclick = function(){
delete_dialog.widgets['Response'].innerHTML = 'Deleting...';
var args = {};
args.dt = delete_dialog.dt; args.dn = delete_dialog.dn;
var callback1 = function(r,rt){
delete_dialog.onhide = delete_dialog.callback;
delete_dialog.hide();
//refreshing node
pscript.load_child_nodes();
}
$c_obj(sdt,'delete',docstring(args),callback1);
}
delete_dialog.n_btn = $a($i('delete_record'),'button','button');
delete_dialog.n_btn.innerHTML = 'Cancel';
delete_dialog.n_btn.onclick = function(){
delete_dialog.widgets['Response'].innerHTML = '';
delete_dialog.onhide = '';
delete_dialog.hide();
}
delete_dialog.widgets['Message'].innerHTML = 'Note: All data will be deleted permanantly. Do you want to continue?';
pscript.delete_dialog = delete_dialog;
}
//if(!delete_dialog.display) delete_dialog.show();
pscript.delete_dialog.show();
pscript.delete_dialog.widgets['Response'].innerHTML = '';
pscript.delete_dialog.sdt = sdt; pscript.delete_dialog.dt=dt; pscript.delete_dialog.dn=dn; pscript.delete_dialog.callback = callback;
}
pscript.remove_child_nodes = function(parent){
var len = parent.childNodes.length;
if(len){
for(l=0; l<len; l++){
var c = parent.childNodes[0];
parent.removeChild(c);
}
}
}
pscript.load_child_nodes = function(){
if(pscript.f_cur_parent){
pscript.f_cur_parent.clear_child_nodes();
pscript.f_cur_parent.expand();
pscript.f_cur_parent.select();
}
else{ pscript.fb_refresh(); }
}

View File

@@ -0,0 +1,121 @@
# Page, File Browser
[
# These values are common in all dictionaries
{
'creation': '2010-10-12 15:19:31',
'docstatus': 0,
'modified': '2010-12-27 11:09:52',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all Page
{
'doctype': 'Page',
'module': 'Utilities',
'name': '__common__',
'page_name': 'File Browser',
'show_in_menu': 1,
'standard': 'Yes'
},
# These values are common for all Page Role
{
'doctype': 'Page Role',
'name': '__common__',
'parent': 'File Browser',
'parentfield': 'roles',
'parenttype': 'Page'
},
# Page, File Browser
{
'doctype': 'Page',
'name': 'File Browser'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 1,
'role': 'Administrator'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 2,
'role': 'Sales User'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 3,
'role': 'Sales Manager'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 4,
'role': 'System Manager'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 5,
'role': 'Purchase User'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 6,
'role': 'Purchase Manager'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 7,
'role': 'Accounts User'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 8,
'role': 'Accounts Manager'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 9,
'role': 'Production User'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 10,
'role': 'Production Manager'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 11,
'role': 'Material User'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 12,
'role': 'Customer'
}
]

View File

View File

@@ -0,0 +1,2 @@
<div id="message_header" style="margin-bottom: 8px"></div>
<div id="inbox_tabs"></div>

View File

@@ -0,0 +1,929 @@
pscript.onload_Messages = function() {
var p = new PageHeader($i('message_header'),'Messages');
pscript.msg_struct = new Message();
}
pscript.onshow_Messages = function() {
pscript.msg_struct.show_inbox();
}
function Message(){
if(!this.mytabs) this.make_body();
}
Message.prototype.make_body = function() {
var me = this;
this.mytabs = new TabbedPage($i('inbox_tabs'));
$y(this.mytabs.body_area, {padding:'16px'})
me.make_inbox();
me.make_compose();
me.make_sent();
this.mytabs.tabs['Inbox'].show();
}
Message.prototype.make_inbox = function() {
var me = this;
//inbox tab
me.mytabs.add_tab('Inbox', function() {
me.inbox_lst.generate_unread_lst();
me.inbox_lst.msg_li.run();
me.cur_inbox_list = me.inbox_lst.msg_li; // for refresh
});
if(!this.inbox_lst) this.inbox_lst = new MessageList(me.mytabs.tabs['Inbox'].tab_body, 'inbox msg');
this.inbox_lst.msg_li.get_query = function() {
//me.checked_msg_lst = [];
me.all_msg = {};
this.query = repl("select distinct t1.name, t1.last_updated_on, t1.last_updated_by, t1.subject, t3.first_name, t3.file_list, t1.message_date, t1.owner, t1.message, t1.previous_updated_by from `tabMail` t1, `tabMail Participant Details` t2, `tabProfile` t3 where t1.is_main_thread='Yes' and t2.participant_name='%(user)s' and (t2.delete_status is NULL or t2.delete_status = 'No') and t1.name = t2.parent and ((t1.last_updated_by = t3.name and t1.last_updated_by!='%(user)s') or (t1.previous_updated_by = t3.name and t1.previous_updated_by!='%(user)s')) order by t1.modified desc", {'user':user});
this.query_max = repl("select distinct count(t1.name) from `tabMail` t1, `tabMail Participant Details` t2, `tabProfile` t3 where t1.is_main_thread='Yes' and t2.participant_name='%(user)s' and (t2.delete_status is NULL or t2.delete_status = 'No') and t1.name = t2.parent and ((t1.last_updated_by = t3.name and t1.last_updated_by!='%(user)s') or (t1.previous_updated_by = t3.name and t1.previous_updated_by!='%(user)s')) order by t1.modified desc", {'user':user});
}
this.inbox_lst.generate_unread_lst();
this.inbox_lst.msg_li.run();
this.inbox_lst.msg_li.onrun = function(){ me.inbox_lst.show_if_no_msg(me.inbox_lst.msg_li); }
}
Message.prototype.make_compose = function() {
var me = this;
me.mytabs.add_tab('Compose', function() {
if(!pscript.compose_msg_obj){
pscript.compose_msg_obj = new MessageThread(me.mytabs.tabs['Compose'].tab_body, me.mytabs.tabs['Inbox'], me.inbox_lst.lst_wrapper, 'My Inbox');
//pscript.compose_msg_obj.show_msg(0, me.mytabs.tabs['Compose'].tab_body, me.mytabs.tabs['Inbox'], me.inbox_lst.lst_wrapper, 'My Inbox', me.mytabs.tabs['Sent'], me.sent_lst.lst_wrapper);
}
pscript.compose_msg_obj.show_msg(0, me.mytabs.tabs['Compose'].tab_body, me.mytabs.tabs['Inbox'], me.inbox_lst.lst_wrapper, 'My Inbox', me.mytabs.tabs['Sent'], me.sent_lst.lst_wrapper);
this.cur_inbox_list = null;
});
}
Message.prototype.make_sent = function() {
var me = this;
// sent msg tab
me.mytabs.add_tab('Sent', function() {
me.sent_lst.msg_li.run();
me.cur_inbox_list = me.sent_lst.msg_li; // for refresh
});
if(!this.sent_lst) this.sent_lst = new MessageList(me.mytabs.tabs['Sent'].tab_body, 'sent msg');
this.sent_lst.msg_li.get_query = function() {
//me.checked_msg_lst = [];
me.all_msg = {};
this.query = repl("select distinct t1.name, t1.last_updated_on, t1.last_updated_by, t1.subject, t3.first_name, t3.file_list, t1.message_date, t1.owner, t1.message from `tabMail` t1, `tabProfile` t3, `tabMail Participant Details` t2 where t1.is_main_thread='Yes' and t1.last_updated_by='%(user)s' and t1.last_updated_by = t3.name and t2.participant_name = '%(user)s' and (t2.delete_status is NULL or t2.delete_status = 'No') and t2.parent = t1.name order by t1.modified desc", {'user':user});
this.query_max = repl("select distinct count(t1.name) from `tabMail` t1, `tabProfile` t3, `tabMail Participant Details` t2 where t1.is_main_thread='Yes' and t1.last_updated_by='%(user)s' and t1.last_updated_by = t3.name and t2.participant_name = '%(user)s' and (t2.delete_status is NULL or t2.delete_status = 'No') and t2.parent = t1.name order by t1.modified desc", {'user':user});
}
this.sent_lst.msg_li.run();
this.sent_lst.msg_li.onrun = function(){ me.sent_lst.show_if_no_msg(me.sent_lst.msg_li); }
}
Message.prototype.show_inbox = function(){
var me = this;
if(me.inbox_lst){
me.inbox_lst.msg_li.run();
}
me.mytabs.tabs['Inbox'].show();
}
MessageList = function(parent_tab, req_frm) {
this.checked_msg_lst = [];
this.unread_msg_lst = [];
this.all_msg = {};
this.parent_tab = parent_tab;
this.req_frm = req_frm;
this.make();
}
MessageList.prototype.make = function(){
var me = this;
this.lst_wrapper = $a(me.parent_tab, 'div');
//toolbar
this.toolbar_area = $a(this.lst_wrapper, 'div', '', {paddingTop:'12px'});
this.create_toolbar();
//no inbox msg div
this.no_lst_wrapper = $a(me.parent_tab, 'div', '', {padding:'8px',backgroundColor:'#FFE4AA'});
$dh(this.no_lst_wrapper);
//view inbox msg div
this.view_msg_wrapper = $a(me.parent_tab, 'div');
this.msg_li = new Listing("Recent Messages",1);
this.msg_li.colwidths = ['90%'];
this.msg_li.opts.no_border = 1;
this.msg_li.opts.show_empty_tab = 0;
this.msg_li.opts.no_border = 1;
this.msg_li.show_cell = function(cell,ri,ci,d) {
if(ri % 2)$y(cell,{backgroundColor:'#E1E3DE'});
if(ci ==0){
this.msg_lst = new MessagePreview(cell, me.req_frm, d[ri][0], d[ri][1], d[ri][2], d[ri][3], d[ri][4], d[ri][5], d[ri][6], d[ri][7], d[ri][8], d[ri][9], me.lst_wrapper, me.view_msg_wrapper, me.unread_msg_lst, me.all_msg);
}
}
this.msg_li.make(this.lst_wrapper);
$dh(this.msg_li.btn_area);
}
MessageList.prototype.create_toolbar = function(){
var me = this;
this.toolbar_tbl = make_table(me.toolbar_area, 1, 2, '100%', ['85%', '15%']);
this.select_all_lnk = $a($td(this.toolbar_tbl, 0, 0), 'span', 'link_type');
this.select_all_lnk.innerHTML = 'Select All';
$dh(this.select_all_lnk);
this.unselect_all_lnk = $a($td(this.toolbar_tbl, 0, 0), 'span', 'link_type');
this.unselect_all_lnk.innerHTML = 'Unselect All';
$dh(this.unselect_all_lnk);
this.select_all_lnk.onclick = function(){
$ds(me.unselect_all_lnk);
$dh(me.select_all_lnk);
for(m in me.all_msg){
me.all_msg[m].checked = true;
}
}
this.unselect_all_lnk.onclick = function(){
$ds(me.select_all_lnk);
$dh(me.unselect_all_lnk);
for(m in me.all_msg){
me.all_msg[m].checked = false;
}
}
this.delete_selected_btn = $a($td(this.toolbar_tbl, 0, 1), 'button', 'button', {align:'right'});
this.delete_selected_btn.innerHTML = 'Delete Selected';
$dh(this.delete_selected_btn);
this.delete_selected_btn.onclick = function(){
me.checked_msg_lst = [];
for(m in me.all_msg){
if(me.all_msg[m].checked == true)
me.checked_msg_lst.push(m);
}
me.delete_selected();
}
}
MessageList.prototype.show_if_no_msg = function(lst_data){
var me = this;
$dh(me.view_msg_wrapper);
if(!lst_data.has_data()){
$ds(me.no_lst_wrapper);
$dh(me.lst_wrapper);
if(me.req_frm == 'inbox msg'){
me.no_lst_wrapper.innerHTML = "You have no messages in your Inbox.";
}
else if(me.req_frm == 'sent msg'){
me.no_lst_wrapper.innerHTML = "You have no messages in your Sent messages list.";
}
} else {
$dh(me.no_lst_wrapper);
$ds(me.lst_wrapper);
$dh(me.no_lst_wrapper);
$ds(me.lst_wrapper);
$dh(this.unselect_all_lnk);
$ds(this.select_all_lnk);
$ds(this.delete_selected_btn);
}
}
MessageList.prototype.generate_unread_lst = function(){
var me = this;
var msg_callback = function(r, rt){
if(r.message.ur_lst){
me.unread_msg_lst = r.message.ur_lst;
}
}
$c('runserverobj', {doctype:'Message Control',method:'get_unread_msg_lst',arg:user}, msg_callback);
}
MessageList.prototype.delete_selected = function(){
var me = this;
if(me.checked_msg_lst.length >= 1) me.msg_li.msg_lst.delete_msg(me.checked_msg_lst);
else msgprint("error:Please select the message to delete");
}
function MessagePreview(parent, req_frm, msg_id, last_updated_on, last_updated_by, subject, first_name, profile_pic, msg_date, msg_owner, message, previous_updated_by, lst_wrapper, view_msg_wrapper, unread_msg_lst, all_msg_dict) {
this.create_structure(parent);
if(req_frm) this.req_frm = req_frm;
this.msg_id = msg_id;
this.subject = subject;
this.message = message;
this.msg_date = msg_date;
this.msg_owner = msg_owner;
this.first_name = first_name;
this.lst_wrapper = lst_wrapper;
this.view_msg_wrapper = view_msg_wrapper;
if(profile_pic) this.profile_pic = profile_pic;
if(last_updated_on) this.last_updated_on = last_updated_on;
if(last_updated_by) this.last_updated_by = last_updated_by;
if(previous_updated_by) this.previous_updated_by = previous_updated_by;
this.unread_msg_lst = unread_msg_lst;
this.all_msg = all_msg_dict;
this.show_msg_sender();
this.show_msg_subject();
this.show_delete_lnk();
}
MessagePreview.prototype.create_structure = function(parent){
this.wrapper = $a(parent,'div');
this.t = make_table(this.wrapper, 1, 4, '100%', ['5%','10%','80%','5%']);
}
MessagePreview.prototype.show_msg_sender = function(){
var me = this;
// checkbox
var chk_box = $a($td(this.t, 0, 0),'div');
if(isIE) {
chk_box.innerHTML = '<input type="checkbox" style="border: 0px">'; // IE fix
this.inp = chk_box.childNodes[0];
} else {
this.inp = $a(chk_box, 'input');
this.inp.type = 'checkbox';
}
this.inp.onclick = function() {
for(m in me.all_msg){
if(m == me.msg_id)
me.all_msg[m].checked = me.inp.checked;
}
}
me.all_msg[me.msg_id] = this.inp;
//sender or receiver
// photo
if(this.profile_pic) {
var img = $a($td(this.t, 0, 1),'img');
var img_src = this.profile_pic.split(NEWLINE)[0].split(',')[0]
img.src = repl('cgi-bin/getfile.cgi?name=%(fn)s&thumbnail=32',{fn:img_src})
}
//name
var div = $a($td(this.t, 0, 1),'div');
div.innerHTML = this.first_name;
}
MessagePreview.prototype.show_msg_subject = function() {
var me = this;
// message
var div1 = $a($td(this.t, 0, 2),'div', '', {paddingBottom:'4px'});
var sp = $a(div1,'span','link_type', {fontSize:'12px'});
sp.innerHTML = 'Sub : ' +me.subject;
var div = $a($td(this.t, 0, 2),'div', 'comment',{paddingBottom:'8px'});
div.innerHTML = 'created by: ' + me.msg_owner +' | created on: ' + dateutil.str_to_user(me.msg_date)+ ' | last updated on: ' + dateutil.str_to_user(me.last_updated_on);
if (me.req_frm == 'inbox msg' && inList(me.unread_msg_lst, me.msg_id)) {
$y(sp,{fontWeight:'bold',color:'Black'});
$y(div,{fontWeight:'bold',color:'Black'});
}
sp.style.cursor = 'pointer';
sp.msg_id = me.msg_id; sp.req_frm = me.req_frm;
sp.onclick = function() {
$dh(me.lst_wrapper);
if(this.req_frm == 'inbox msg'){
if(!pscript.inbox_msg_obj){
pscript.inbox_msg_obj = new MessageThread(me.view_msg_wrapper, pscript.msg_struct.mytabs.tabs['Inbox'], me.lst_wrapper, 'My Inbox');
}
pscript.inbox_msg_obj.show_msg(this.msg_id, me.view_msg_wrapper, pscript.msg_struct.mytabs.tabs['Inbox'], me.lst_wrapper, 'My Inbox', pscript.msg_struct.mytabs.tabs['Sent'], me.lst_wrapper);
//mark for already read
if (this.req_frm == 'inbox msg' && inList(me.unread_msg_lst,this.msg_id)) {
me.mark_as_read(this.msg_id);
}
}
else if(this.req_frm == 'sent msg'){
if(!pscript.sent_msg_obj){
pscript.sent_msg_obj = new MessageThread(me.view_msg_wrapper, pscript.msg_struct.mytabs.tabs['Sent'], me.lst_wrapper, 'My Inbox');
}
pscript.sent_msg_obj.show_msg(this.msg_id, me.view_msg_wrapper, pscript.msg_struct.mytabs.tabs['Sent'], me.lst_wrapper, 'My Inbox', pscript.msg_struct.mytabs.tabs['Sent'], me.lst_wrapper);
}
}
}
MessagePreview.prototype.mark_as_read = function(msg_id){
this.msg_id = msg_id;
var me = this;
args = {'user' : user, 'msg':this.msg_id,'read':'Yes'}
$c_obj('Message Control','read_unread_message',docstring(args),function(r,rt){
me.remove_element(me.unread_msg_lst, me.msg_id);
});
}
MessagePreview.prototype.delete_msg = function(msg_nm_lst){
this.msg_nm_lst = msg_nm_lst;
var me = this;
var delete_msg_dialog;
set_delete_msg_dialog = function() {
delete_msg_dialog = new Dialog(400, 200, 'Delete Message');
delete_msg_dialog.make_body([
['HTML', 'Message', '<div class = "comment">Are you sure, you want to delete message(s) ?</div>'],
['HTML', 'Response', '<div class = "comment" id="delete_msg_dialog_response"></div>'],
['HTML', 'Delete Msg', '<div></div>']
]);
var delete_msg_btn1 = $a($i(delete_msg_dialog.widgets['Delete Msg']), 'button', 'button');
delete_msg_btn1.innerHTML = 'Yes';
delete_msg_btn1.onclick = function(){ delete_msg_dialog.add(); }
var delete_msg_btn2 = $a($i(delete_msg_dialog.widgets['Delete Msg']), 'button', 'button');
delete_msg_btn2.innerHTML = 'No';
$y(delete_msg_btn2,{marginLeft:'4px'});
delete_msg_btn2.onclick = function(){ delete_msg_dialog.hide();}
delete_msg_dialog.onshow = function() {
$i('delete_msg_dialog_response').innerHTML = '';
}
delete_msg_dialog.add = function() {
// sending...
$i('delete_msg_dialog_response').innerHTML = 'Processing...';
var m_arg = user+ '~~' + this.msg_nm_lst;
var call_back = function(r,rt) {
if(r.message == 'true'){
$i('delete_msg_dialog_response').innerHTML = 'Message Deleted';
delete_msg_dialog.hide();
for(m=0; m<me.msg_nm_lst.length; m++){
if(inList(me.unread_msg_lst, me.msg_nm_lst[m]))
me.remove_element(me.unread_msg_lst, me.msg_nm_lst[m]);
}
pscript.msg_struct.inbox_lst.msg_li.run();
pscript.msg_struct.sent_lst.msg_li.run();
}
}
$c('runserverobj', {doctype:'Message Control',method:'delete_message',arg:m_arg}, call_back);
}
}
if(!delete_msg_dialog){
set_delete_msg_dialog();
}
delete_msg_dialog.msg_nm_lst = this.msg_nm_lst;
delete_msg_dialog.show();
}
MessagePreview.prototype.remove_element = function(arrayName, arrayElement){
for(var i=0; i<arrayName.length;i++ )
{
if(arrayName[i]==arrayElement)
arrayName.splice(i,1);
}
}
MessagePreview.prototype.show_delete_lnk = function() {
var me = this;
var div = $a($td(this.t, 0, 3), 'span', 'link_type');
div.innerHTML = 'Delete';
div.msg_id = me.msg_id;
div.onclick = function() {
me.delete_msg(me.msg_id);
}
}
MessagePart = function(parent){
var me = this;
this.parent = parent;
this.inputs = {};
me.make_header();
me.make_reply();
me.make_post();
}
MessagePart.prototype.make = function(label, ele, comment){
var me = this;
var div = $a(this.parent,'div','',{marginBottom:'12px'});
var t = make_table(div,2,1,'70%',['100%']);
if( ele == 'button'){
var element = $a($td(t,0,0), 'button');
element.innerHTML = label;
}
else {
var element = $a($td(t,1,0),ele);
// large fonts for inputs
if(in_list(['input','textarea'],ele.toLowerCase())) {
$y(element,{fontSize:'14px', width:'100%'})
}
$td(t,0,0).innerHTML = label;
}
if(comment) {
var div2 = $a(div,'div','',{fontSize:'11px', color:'#888', marginTop:'2px'});
div2.innerHTML = comment;
}
element.wrapper = div;
if(label) me.inputs[label] = element;
return element;
}
MessagePart.prototype.make_header = function(){
var me = this;
this.back_link_div = $a(me.make('','div'),'span', 'link_type', {paddingTop:'12px'});
this.back_link_div.innerHTML = 'Back to List';
me.make('To','textarea','Enter Email Ids separated by commas (,)');
$y(me.inputs['To'],{overflow :'auto', height : '50px'});
me.make('Subject','input');
}
MessagePart.prototype.make_reply = function(){
var me = this;
this.inputs.Thread = $a(this.parent, 'div', '', {margin:'16px 0px'})
}
MessagePart.prototype.make_post = function(){
var me = this;
me.make('Message','textarea');
$y(me.inputs['Message'],{height:'240px'});
// send + cancel
var d = $a(this.parent, 'div');
me.inputs.Send = $btn(d, 'Send');
me.inputs.Reply = $a(d, 'Reply')
}
MessagePart.prototype.add_header_values = function(to_list, subject){
var me = this;
//thread_participants
me.inputs['To'].value = to_list.join(',');
me.inputs['To'].disabled = true;
// subject
me.inputs['Subject'].value = subject;
me.inputs['Subject'].disabled = true;
}
MessagePart.prototype.add_reply_thread = function(thread){
var me = this;
// prev messages
var t = me.inputs['Thread'];
t.innerHTML = ''; // clear previous threads
var w = $a(t,'div','',{width:'70%'});
var tab = make_table(w,thread.length,2,'100%',['20%','80%'], {padding:'8px 0px', borderBottom:'1px solid #AAA'});
for(i=0;i<thread.length;i++) {
// ---- photo ----
if(thread[i][6]) {
var img = $a($td(tab,i,0),'img');
var img_src = thread[i][6].split(NEWLINE)[0].split(',')[0];
img.src = repl('cgi-bin/getfile.cgi?name=%(fn)s&thumbnail=32',{fn:img_src});
}
// ---- sender name ----
var d = $a($td(tab,i,0),'div','',{fontSize:'11px'});
d.innerHTML = thread[i][5];
//----- date ----
var d = $a($td(tab,i,1),'div', 'comment', {marginLeft:'8px', color:'#888', fontSize:'11px'});
d.innerHTML = dateutil.str_to_user(thread[i][3]);
//------ message ------
var d = $a($td(tab,i,1),'div', 'comment', {fontSize:'14px', marginLeft:'8px'});
d.innerHTML = replace_newlines(thread[i][1]);
$y($td(tab,i,1), {paddingBottom: '8px'});
}
}
//++++++++++++++++++++++++ Message ++++++++++++++++++++++++
MessageThread = function(parent, view_list_tab, view_list_div, req_frm) {
var me = this;
this.wrapper = $a(parent,'div');
if(!this.msg_parts) this.make(view_list_tab, view_list_div, req_frm);
}
MessageThread.prototype.add_autosuggest = function() {
var me = this;
// ---- add auto suggest ----
var opts = { script: '', json: true, maxresults: 10, timeout: 10000, delay:250, maxentries:500, cache:false};
var as = new AutoSuggest(me.msg_parts.inputs['To'], opts);
as.custom_select = function(txt, sel) {
// ---- add to the last comma ----
var r = '';
var tl = txt.split(',');
for(var i=0;i<tl.length-1;i++) r=r+tl[i]+',';
r = r+(r?' ':'')+sel+',';
if(r[r.length-1]==NEWLINE) { r=substr(0,r.length-1);}
return r;
}
// ---- override server call ----
as.doAjaxRequest = function(txt) {
var pointer = as; var q = '';
// ---- get last few letters typed ----
var last_txt = txt.split(',');
last_txt = last_txt[last_txt.length-1];
// ---- show options ----
var call_back = function(r,rt) {
as.aSug = [];
var jsondata = r.message;
for (var i=0;i<jsondata.results.length;i++) {
as.aSug.push({'id':jsondata.results[i].id, 'value':jsondata.results[i].value, 'info':jsondata.results[i].info});
}
as.idAs = "as_for_to_message";
//old create list
as.createList(as.aSug);
}
$c_obj('Message Control', 'get_to_list', (last_txt ? last_txt : '%'), call_back);
return;
}
}
MessageThread.prototype.make = function(view_list_tab, view_list_div, req_frm) {
var me = this;
me.view_list_tab = view_list_tab;
me.view_list_div = view_list_div;
me.req_frm = req_frm;
this.msg_parts = new MessagePart(me.wrapper);
this.msg_parts.back_link_div.onclick = function() {
me.hide();
if(me.in_compose) {
if(me.req_frm == 'My Inbox') { me.view_list_tab.show(); $ds(me.view_list_div); }
}
}
// autosuggest
me.add_autosuggest();
}
MessageThread.prototype.set_inbox_editor = function(editor) {
pscript.inbox_text_editor_set = 1;
}
MessageThread.prototype.view_existing_msg = function(args){
var me = this;
$c_obj('Message Control', 'get_thread_details', docstring(args),
function(r, rt){
var tl = r.message.tl;
var to_list = r.message.to_list;
//to and subject
me.msg_parts.add_header_values(to_list, tl[0][0]);
//reply thread
me.msg_parts.add_reply_thread(tl);
//post area
if(me.inbox_editor && pscript.inbox_text_editor_set == 1){
me.inbox_editor.editor.setContent('');
}
else{
me.msg_parts.inputs['Message'].value = '';
}
me.show_as(true);
}
);
}
MessageThread.prototype.view_blank_form = function(){
var me = this;
$ds(me.msg_parts.inputs['To'].wrapper);
me.msg_parts.inputs['To'].disabled = false;
me.msg_parts.inputs['To'].value = '';
me.msg_parts.inputs['Subject'].disabled = false;
me.msg_parts.inputs['Subject'].value = '';
me.msg_parts.inputs['Thread'].innerHTML = '';
if(me.inbox_editor && pscript.inbox_text_editor_set == 1){
me.inbox_editor.editor.setContent('');
}
else{
me.msg_parts.inputs['Message'].value = '';
}
me.show_as(false);
}
// msg_id = mesage id,
// parent = div/tab from where msg will be shown,
// view_list_tab = name of tab in which list will be viewed,
// view_list_div = name of div in which list will be viewed,
// req_frm = my inbox / group / event,
// show_on_send_tab = tab to be viewed on sending/replying to msg,
// show_on_send_div = div to be viewed on sending/replying to msg,
// receiver_lst = list of msg receiver
MessageThread.prototype.show_msg = function(msg_id, parent, view_list_tab, view_list_div, req_frm, show_on_send_tab, show_on_send_div, receiver_lst) {
var me = this;
// set tinymce editor
if(!me.inbox_editor) {
pscript.inbox_text_editor_set = 0;
var theme_adv_btn1 ="fontselect,fontsizeselect,formatselect,indicime,indicimehelp,emotions";
var theme_adv_btn2 ="bold,italic,underline,|,undo,redo,|,code,forecolor,backcolor,link,unlink,hr,|,sub,sup,|,charmap";
var theme_adv_btn3 = "";
me.inbox_editor = new TextAreaEditor(me.msg_parts.inputs["Message"], null, me.set_inbox_editor, theme_adv_btn1, theme_adv_btn2, theme_adv_btn3, '300px');
}
me.req_frm = req_frm;
me.receiver_lst = receiver_lst;
me.parent = parent;
me.view_list_tab = view_list_tab;
me.view_list_div = view_list_div;
me.show_on_send_tab = show_on_send_tab;
me.show_on_send_div = show_on_send_div;
me.msg_parts.inputs['Send'].btn_click = 0;
me.msg_parts.inputs['Reply'].btn_click = 0;
if(msg_id) {
this.cur_message_id = msg_id;
var args = {'user_name':user, 'cur_msg_id': this.cur_message_id};
me.view_existing_msg(args);
}
else {
this.cur_message_id = null;
me.view_blank_form();
}
$ds(me.parent);
// reply or send btn
me.msg_parts.inputs['Send'].onclick = function(){
if(!this.btn_click){
this.btn_click = 1;
me.send(me.req_frm, me.receiver_lst, me.show_on_send_tab, me.show_on_send_div);
}
}
me.msg_parts.inputs['Reply'].onclick = me.msg_parts.inputs['Send'].onclick;
}
MessageThread.prototype.hide = function() {
var me = this;
$dh(me.wrapper);
$ds(me.view_list_div);
me.display = 0;
}
MessageThread.prototype.show_as = function(reply) {
var me = this;
if(!reply) {
$dh(me.msg_parts.inputs['Thread'].wrapper);
$dh(me.msg_parts.inputs['Reply']);
$ds(me.msg_parts.inputs['Send']);
me.in_compose = 1;
}
else {
$ds(me.msg_parts.inputs['Thread'].wrapper);
$ds(me.msg_parts.inputs['Reply']);
$dh(me.msg_parts.inputs['Send']);
$dh(me.view_list_div);
me.in_compose = 1;
}
$ds(me.wrapper);
me.display = 1;
}
MessageThread.prototype.send_msg = function(arg){
var me = this;
var args = arg;
var send_call_back = function(r, rt){
//var me = this;
if(r.message == 'true'){
me.msg_parts.inputs['To'].value = '';
me.msg_parts.inputs['Subject'].value = '';
me.msg_parts.inputs['Thread'].innerHTML = '';
if(me.inbox_editor && pscript.inbox_text_editor_set == 1){
me.inbox_editor.editor.setContent('');
}
else{
me.msg_parts.inputs['Message'].value = '';
}
if(me.req_frm == 'My Inbox'){
pscript.msg_struct.sent_lst.msg_li.run();
me.show_on_send_tab.show();
$ds(me.show_on_send_div);
$dh(me.parent);
}
}
}
if(me.cur_message_id==null){
$c_obj('Message Control','send_message',docstring(args), send_call_back);
}
else{
$c_obj('Message Control','send_reply',docstring(args), send_call_back);
}
}
MessageThread.prototype.send = function(req_frm, receiver_lst, show_on_send_tab, show_on_send_div) {
var me = this;
me.req_frm = req_frm;
me.show_on_send_tab = show_on_send_tab;
me.show_on_send_div = show_on_send_div;
var args = {'user_name':user};
if(me.inbox_editor && pscript.inbox_text_editor_set == 1){
args.message = me.inbox_editor.editor.getContent();
}
else{
args.message = me.msg_parts.inputs['Message'].value;
}
if(me.cur_message_id==null){
args.subject = me.msg_parts.inputs['Subject'].value;
args.to_list = me.msg_parts.inputs['To'].value;
if(!args.to_list) {msgprint('error:Must enter "To:"'); }
else if(!args.subject) {msgprint('error:Must enter "Subject"'); }
else me.send_msg(args);
}
else{
var subj = me.msg_parts.inputs['Subject'].value;
if(!subj.substr(0,3).toLowerCase()=='re:')
subj = 'Re: ' + subj;
args.subject = subj;
args.message_id = me.cur_message_id;
me.send_msg(args);
}
}
MessageThread.prototype.delete_msg = function(req_frm, parent, view_list_tab, view_list_div) {
var me = this;
var msg_lst = [];
var delete_message_dialog;
me.parent = parent;
if(me.cur_message_id)
msg_lst.push(me.cur_message_id);
if(msg_lst.length >= 1){
function set_delete_message_dialog() {
delete_message_dialog = new Dialog(400, 400, 'Delete Message');
delete_message_dialog.make_body([
['HTML', 'Message', '<div class = "comment">Are you sure, you want to delete this message ?</div>'],
['HTML', 'Response', '<div class = "comment" id="delete_message_dialog_response"></div>'],
['HTML', 'Delete Message', '<div id="delete_message_btn" style ="height:25px;"></div>']
]);
var delete_message_btn1 = $a($i('delete_message_btn'), 'button', 'button');
delete_message_btn1.innerHTML = 'Yes';
delete_message_btn1.onclick = function(){ delete_message_dialog.add();}
var delete_message_btn2 = $a($i('delete_message_btn'), 'button', 'button');
delete_message_btn2.innerHTML = 'No';
$y(delete_message_btn2,{marginLeft:'4px'});
delete_message_btn2.onclick = function(){ delete_message_dialog.hide();}
delete_message_dialog.onshow = function() {
$i('delete_message_dialog_response').innerHTML = '';
}
delete_message_dialog.add = function() {
if(this.req_frm == 'My Inbox'){
var args = user + '~~' + this.msg_lst;
$c_obj('Message Control', 'delete_message', args, function(r, rt){
if(r.message == 'true'){
me.hide();
me.view_list_tab.show();
$ds(me.view_list_div);
delete_message_dialog.hide();
}
});
}
}
}
if(!delete_message_dialog)
set_delete_message_dialog();
delete_message_dialog.req_frm = req_frm;
delete_message_dialog.msg_lst = msg_lst;
delete_message_dialog.view_list_tab = view_list_tab;
delete_message_dialog.view_list_div = view_list_div;
delete_message_dialog.show();
}
}
// ---------------- editor---------------------
var editor_count = 0;
function TextAreaEditor(txt, parent, callback, theme_advanced_btn1, theme_advanced_btn2, theme_advanced_btn3, editor_ht) {
this.txt = txt;
this.parent = parent;
this.callback = callback;
if(theme_advanced_btn1) this.theme_advanced_btn1 = theme_advanced_btn1;
if(theme_advanced_btn2) this.theme_advanced_btn2 = theme_advanced_btn2;
if(theme_advanced_btn3) this.theme_advanced_btn3 = theme_advanced_btn3;
if(editor_ht) this.editor_ht = editor_ht;
// load tinyMCE library
this.load_tiny_mce_library();
}
TextAreaEditor.prototype.load_tiny_mce_library = function() {
var me = this;
if(!tinymce_loaded) {
tinymce_loaded = 1;
tinyMCE_GZ.init(
{
themes : "advanced",
plugins : "style,table,inlinepopups,indicime,emotions",
languages : "en",
disk_cache : true
}, function(){ me.setup_text_area() });
}
else {
me.setup_text_area();
}
}
TextAreaEditor.prototype.setup_text_area = function() {
var me = this;
if(!me.txt) {
me.txt = $a(me.parent, 'textarea');
}
editor_count++;
me.id = 'editor_text_' + editor_count;
me.txt.setAttribute('id', me.id);
tinyMCE.init({
theme : "advanced",
mode : "exact",
elements: me.id,
plugins:"table,style,inlinepopups,indicime,emotions",
theme_advanced_toolbar_location : "top",
theme_advanced_statusbar_location : "bottom",
extended_valid_elements: "div[id|dir|class|align|style]",
// w/h
width: '100%',
height: me.editor_ht?me.editor_ht:'50px',
// buttons
//theme_advanced_buttons1 :"bold,italic,underline,strikethrough,blockquote,forecolor,backcolor,bullist,numlist,|,undo,redo,|,image,code,indicime,indicimehelp,emotions",
theme_advanced_buttons1 : me.theme_advanced_btn1?me.theme_advanced_btn1:"bold,italic,underline,forecolor,backcolor,|,undo,redo,|,link,unlink,indicime,indicimehelp,emotions",
theme_advanced_buttons2 : me.theme_advanced_btn2?me.theme_advanced_btn2:"",
theme_advanced_buttons3 : me.theme_advanced_btn3?me.theme_advanced_btn3:"",
// callback function with editor instance.
init_instance_callback : "editor_init_callback"
});
editor_init_callback = function(inst) {
me.editor = tinyMCE.get(me.id);
me.editor.focus();
if(me.callback){
me.callback(me.editor);
}
}
}

View File

@@ -0,0 +1 @@
[{'creation': '2010-06-07 10:34:37', 'module': 'Tools', 'doctype': 'Page', 'owner': 'Administrator', 'style': None, 'modified_by': 'nabin@webnotestech.com', 'script': None, 'show_in_menu': 1, 'content': None, 'page_name': 'Messages', 'menu_index': None, 'docstatus': 0, 'parent': None, 'standard': 'Yes', 'icon': None, 'name': 'Messages', 'idx': None, 'static_content': None, 'modified': '2010-09-25 00:00:00', 'parenttype': None, 'parent_node': None, 'parentfield': None}, {'modified_by': 'nabin@webnotestech.com', 'name': 'PR000137', 'parent': 'Messages', 'creation': '2010-06-07 10:34:37', 'modified': '2010-09-01 14:56:20', 'doctype': 'Page Role', 'idx': 1, 'parenttype': 'Page', 'role': 'Administrator', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': 'roles'}, {'modified_by': 'nabin@webnotestech.com', 'name': 'PR000138', 'parent': 'Messages', 'creation': '2010-06-07 13:35:43', 'modified': '2010-09-01 14:56:20', 'doctype': 'Page Role', 'idx': 2, 'parenttype': 'Page', 'role': 'All', 'owner': 'Administrator', 'docstatus': 0, 'parentfield': 'roles'}]

View File

@@ -0,0 +1,2 @@
<div>
</div>

View File

View File

@@ -0,0 +1,2 @@
<div id="trash_header">&nbsp;</div>
<div id="trash_div" style="margin: 0px;">&nbsp;</div>

View File

@@ -0,0 +1,128 @@
pscript['onload_Trash'] = function() {
// header and toolbar
var h = new PageHeader('trash_header','Trash Bin','Restore the documents that you have trashed')
if(!pscript.trash_bin) pscript.trash_bin = new pscript.Trash();
}
pscript.Trash = function() {
// create UI elements
this.wrapper = $i('trash_div');
this.head = $a(this.wrapper, 'div');
this.body = $a(this.wrapper, 'div');
$y(this.body, {margin:'8px'})
this.make_head();
this.load_masters();
}
// Make Button
// ------------
pscript.Trash.prototype.make_button = function(label, area){
var me = this;
var w = $a(area, 'div', '', {margin:'8px'});
var t = make_table(w,1,1,'400px',['50%','50%']);
var s = $a($td(t,0,0),'button');
s.innerHTML = label;
s.wrapper = w;
return s;
}
// Make Head
// -------------
pscript.Trash.prototype.make_head = function() {
var me = this;
var make_select = function(label) {
var w = $a(me.head, 'div', '', {margin:'8px'});
var t = make_table(w,1,2,'400px',['50%','50%']);
$td(t,0,0).innerHTML = label;
var s = $a($td(t,0,1),'select','',{width:'140px'});
s.wrapper = w;
return s;
}
// Select Master Name
this.master_select = make_select('Select Master');
var me = this;
// Get Records
this.get_records_button = me.make_button('Get Records', me.head);
this.get_records_button.onclick = function() {
me.get_records();
}
}
// Load Masters
// -------------
pscript.Trash.prototype.load_masters = function(){
var me = this;
var callback = function(r, rt){
// Masters
empty_select(me.master_select);
add_sel_options(me.master_select,add_lists(['All'], r.message), 'All');
}
$c_obj('Trash Control','get_masters','',callback);
}
// Get Records
// -----------
pscript.Trash.prototype.get_records = function(){
var me = this;
me.body.innerHTML = '';
var callback = function(r, rt){
if(r.message) me.generate_trash_records(r.message);
else msgprint("No Records Found");
}
$c_obj('Trash Control','get_trash_records',sel_val(me.master_select),callback);
}
// Generate Trash Records
// -----------------------
pscript.Trash.prototype.generate_trash_records = function(rec_dict){
var me = this;
pscript.all_checkboxes = [];
mnames = keys(rec_dict).sort();
for(var i = 0; i < mnames.length; i ++){
var head = $a(me.body, 'h3'); head.innerHTML = mnames[i];
var rec_table = make_table(me.body,rec_dict[mnames[i]].length,2,'375px',['350px','25px'],{border:'1px solid #AAA',padding:'2px'});
for(var j = 0; j < rec_dict[mnames[i]].length; j++){
$a_input($td(rec_table,j,0), 'data');
$td(rec_table,j,0).innerHTML = rec_dict[mnames[i]][j];
var chk = $a_input($td(rec_table,j,1), 'checkbox');
chk.master = mnames[i];
chk.record = rec_dict[mnames[i]][j];
pscript.all_checkboxes.push(chk);
}
}
this.restore_button = me.make_button('Restore Selected', me.body);
this.restore_button.onclick = function() {
me.restore_records(0);
}
this.restore_all_button = me.make_button('Restore All', me.body);
this.restore_all_button.onclick = function() {
me.restore_records(1);
}
}
// Restore Records
// ---------------
pscript.Trash.prototype.restore_records = function(restore_all){
var me = this;
var out = {};
for(i in pscript.all_checkboxes) {
c = pscript.all_checkboxes[i];
if (restore_all || (!restore_all && c.checked)) {
if(!out[c.master]) out[c.master] = [c.record];
else {out[c.master].push(c.record);}
}
}
$c_obj('Trash Control','restore_records',JSON.stringify(out),function(r, rt){me.get_records();})
}

View File

@@ -0,0 +1,72 @@
# Page, Trash
[
# These values are common in all dictionaries
{
'creation': '2010-10-12 15:19:32',
'docstatus': 0,
'modified': '2010-12-30 11:44:36',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all Page
{
'doctype': 'Page',
'module': 'Utilities',
'name': '__common__',
'page_name': 'Trash',
'show_in_menu': 0,
'standard': 'Yes'
},
# These values are common for all Page Role
{
'doctype': 'Page Role',
'name': '__common__',
'parent': 'Trash',
'parentfield': 'roles',
'parenttype': 'Page'
},
# Page, Trash
{
'doctype': 'Page',
'name': 'Trash'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 1,
'role': 'Administrator'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 2,
'role': 'Sales Master Manager'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 3,
'role': 'Material Master Manager'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 4,
'role': 'Purchase Master Manager'
},
# Page Role
{
'doctype': 'Page Role',
'idx': 5,
'role': 'Accounts Manager'
}
]

View File

View File

@@ -0,0 +1,2 @@
<div id="wip_head"></div>
<div id="wip_body" style="margin:16px"></div>

View File

@@ -0,0 +1,88 @@
pscript['onload_WIP Monitor'] = function(){
wip = new WIP_Monitor();
var h = new PageHeader('wip_head','Work in Progress Monitor','A quick glance at your work in progress and pipeline');
h.add_button('Refresh', function(){ wip = new WIP_Monitor();}, 1, 'ui-icon-refresh');
}
// Work In Progress Monitor
// =========================================================================================================================================================
WIP_Monitor = function(){
var me = this;
this.row_index = 0;
$c_obj('Home Control','get_wip_counts','',function(r,rt){
me.make_wip_dashboard(r.message);
});
}
// Make wip dashboard
// ------------------
WIP_Monitor.prototype.make_wip_dashboard = function(wip_dict)
{
var me = this;
// list of doctypes which user can read
var can_read_dt = ['Lead', 'Enquiry', 'Sales Order', 'Receivable Voucher', 'Indent', 'Purchase Order', 'Payable Voucher', 'Delivery Note', 'Task', 'Serial No'];
$i('wip_body').innerHTML = '';
this.tab = make_table('wip_body',1,0,'100%',[],{padding:'4px'});
for(var k=0; k<can_read_dt.length; k++){
// check if the user can read these doctypes
if(in_list(profile.can_read, get_doctype_label(can_read_dt[k])))
{
var work = can_read_dt[k];
if(this.tab.rows[this.row_index].cells.length==2){
this.row_index = this.row_index + 1;
this.tab.insertRow(this.tab.rows.length);
}
var parent = this.tab.rows[this.row_index].insertCell(this.tab.rows[this.row_index].cells.length);
$y(parent, {paddingBottom:'16px', width:'50%', paddingLeft:'8px'})
me.show_wip_dashboard(parent, work, wip_dict[work]);
}
}
}
// Show wip dashboard
// ------------------
WIP_Monitor.prototype.show_wip_dashboard = function(parent, head, report_dict)
{
var me = this;
var report_dt
// dictionary for labels to be displayed
var wip_lbl_map = {'Lead':'Lead', 'Enquiry':'Enquiries', 'Sales Order':'Sales Order', 'Receivable Voucher':'Invoices', 'Indent':'Indent', 'Purchase Order':'Purchase Order', 'Payable Voucher':'Bills', 'Delivery Note':'Delivery Note', 'Task':'Tasks', 'Serial No':'Maintenance'};
// header
var h = $a(parent,'h3');
h.innerHTML = wip_lbl_map[head];
report_dt = head;
for(report in report_dict){
me.make_report_body(parent, report, report_dict[report], report_dt);
}
}
// Make wip report body
// --------------------
WIP_Monitor.prototype.make_report_body = function(parent, lbl, records, rep_dt)
{
var me = this;
dt_color = lbl=='Overdue' ? 'red' : 'black';
var tab2 = make_table(parent,1,2, '70%', ['10%', '90%'], {padding:'4px'});
// no of records
var s1 = $a($td(tab2,0,0), 'span', '', {fontWeight:'bold', fontSize:'12px', color:dt_color});
s1.innerHTML = records;
// link to report
var s1 = $a($td(tab2,0,1), 'span', 'link_type', {cursor:'pointer', color:'#DFH'});
s1.dt = rep_dt; s1.cn = rep_dt + '-' + lbl; s1.innerHTML = lbl;
s1.onclick = function() { loadreport(this.dt, this.cn); }
}

View File

@@ -0,0 +1,28 @@
# Page, WIP Monitor
[
# These values are common in all dictionaries
{
'creation': '2010-12-14 10:23:29',
'docstatus': 0,
'modified': '2011-01-04 11:12:39',
'modified_by': 'Administrator',
'owner': 'Administrator'
},
# These values are common for all Page
{
'doctype': 'Page',
'module': 'Utilities',
'name': '__common__',
'page_name': 'WIP Monitor',
'show_in_menu': 0,
'standard': 'Yes'
},
# Page, WIP Monitor
{
'doctype': 'Page',
'name': 'WIP Monitor'
}
]