Fix #6343 - generic progress bar delete
[Pman.Core] / Pman.Delete.js
1 /*
2  * Generic Delete function (moved from Pman.js)
3  *
4  * with progressbar version.
5  */
6
7
8 Pman.Delete = {
9     
10     
11     selections : function(tab)
12     {
13         var r = [];
14  
15             
16         var s = tab.grid.getSelectionModel().getSelections();
17         if (!s.length)  {
18             Roo.MessageBox.alert("Error", "Select at least one Row to delete" );
19             return '';
20         }
21         var reader = tab.grid.reader || tab.grid.ds.reader;
22         for(var i = 0; i < s.length; i++) {
23             r.push(reader.getId(s[i].json));
24         }
25         return r;
26     },
27     
28     // previous version - no progress..
29     
30     simple : function(tab, tbl)
31     {
32         
33         var r = this.selections(tab);
34         if (!r.length) {
35             return;
36         }
37         
38         
39         Roo.MessageBox.confirm("Confirm", "Are you sure you want to delete that?",
40             function(btn) {
41                 if (btn != 'yes') {
42                     return;
43                 }
44                 tab.grid.getView().mainWrap.mask("Deleting");
45                 Pman.Delete.simpleCall(tab, tbl, r, function(response) {
46                     tab.grid.getView().mainWrap.unmask();
47                     Pman.Delete.completed(tab);
48                 });
49                 
50             }
51             
52         );
53      },
54     
55     simpleCall : function(tab, tbl, r, resp)
56     {
57             // what about the toolbar??
58         
59         new Pman.Request({
60             url: baseURL + '/Roo/'+tbl,
61             method: 'POST',
62             params: {
63                 _delete : r.join(',')
64             },
65             success: resp,
66             failure: function(act) {
67                 
68                 Roo.log(act);
69                 var msg = '';
70                 try {
71                     msg = act.errorMsg;
72                 } catch(e) {
73                     msg = "Error deleting";
74                 }
75                 tab.grid.getView().mainWrap.unmask();
76                 Roo.MessageBox.alert("Error",  msg);
77             }
78             
79         });
80     },
81     
82     progress : function(tab, tbl) {
83         
84         var r = this.selections(tab);
85         if (!r.length) {
86             return;
87         }
88         
89         
90         Roo.MessageBox.confirm("Confirm", "Are you sure you want to delete that?",
91             function(btn) {
92                 if (btn != 'yes') {
93                     return;
94                 }
95                 Roo.MessageBox.progress("Delete Records", "Deleting 1/" + r.length );
96                 
97                 
98                 var p = 0;
99                 
100                 var delItem = function ()
101                 {
102                     Roo.MessageBox.updateProgress(  (p+1)/r.length, "Deleting " + (1+p) + "/" + r.length );
103                     Pman.Delete.simpleCall(tab, tbl, [ r[p] ], function(response) {
104                         
105                         p++;
106                         if (p == r.length) {
107                             Roo.MessageBox.hide();
108                             Pman.Delete.completed(tab);
109                             return;
110                         }
111                         
112                         delItem();
113                     });
114                 }
115                 delItem();
116                
117                 
118             }
119             
120         );
121     },
122     completed : function(tab)
123     {
124         
125         if ( tab.paging ) {
126             tab.paging.onClick('refresh');   
127         } else if (tab.grid.footer && tab.grid.footer.onClick) {
128             // new xtype built grids
129             tab.grid.footer.onClick('refresh');   
130         } else if (tab.refresh) {
131             tab.refresh(); // this might cause problems as panels have a refresh method?
132         } else {
133             tab.grid.getDataSource().load();
134         }
135     
136     }
137 }