Form.js 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188
  1. MWF.require("MWF.widget.Common", null, false);
  2. MWF.require("MWF.xAction.org.express.RestActions", null,false);
  3. MWF.xDesktop.requireApp("Organization", "Selector.package", null, false);
  4. MWF.require("MWF.widget.Identity", null,false);
  5. MWF.xApplication.process = MWF.xApplication.process || {};
  6. MWF.xApplication.process.Xform = MWF.xApplication.process.Xform || {};
  7. MWF.xDesktop.requireApp("process.Xform", "Package", null, false);
  8. MWF.xApplication.process.Xform.Form = MWF.APPForm = new Class({
  9. Implements: [Options, Events],
  10. Extends: MWF.widget.Common,
  11. options: {
  12. "style": "default",
  13. "readonly": false,
  14. "cssPath": "",
  15. "moduleEvents": ["postLoad", "afterLoad", "beforeSave", "afterSave", "beforeClose", "beforeProcess", "afterProcess"]
  16. },
  17. initialize: function(node, data, options){
  18. this.setOptions(options);
  19. this.container = $(node);
  20. this.container.setStyle("-webkit-user-select", "text");
  21. this.data = data;
  22. this.json = data.json;
  23. this.html = data.html;
  24. this.path = "/x_component_process_Xform/$Form/";
  25. this.cssPath = this.options.cssPath || "/x_component_process_Xform/$Form/"+this.options.style+"/css.wcss";
  26. this._loadCss();
  27. this.modules = [];
  28. this.all = {};
  29. this.forms = {};
  30. if (!this.personActions) this.personActions = new MWF.xAction.org.express.RestActions();
  31. },
  32. load: function(){
  33. if (this.app){
  34. if (this.app.formNode) this.app.formNode.setStyles(this.json.styles);
  35. }
  36. if (!this.businessData.control.allowSave) this.setOptions({"readonly": true});
  37. if (this.fireEvent("queryLoad")){
  38. this.fireEvent("beforeLoad");
  39. MWF.xDesktop.requireApp("process.Xform", "lp."+MWF.language, null, false);
  40. // this.container.setStyles(this.css.container);
  41. this._loadBusinessData();
  42. this.Macro = new MWF.Macro.FormContext(this);
  43. this._loadHtml();
  44. this._loadForm();
  45. this._loadModules(this.node);
  46. this.fireEvent("postLoad");
  47. this.fireEvent("afterLoad");
  48. }
  49. },
  50. _loadBusinessData: function(){
  51. if (!this.businessData){
  52. this.businessData = {
  53. "data": {
  54. "select": "222",
  55. "radio": "bbb",
  56. "checkbox": ["check1", "check3"],
  57. "orderData": [
  58. {
  59. "orderName": {"namefield": "电脑"},
  60. "orderCount": {"countField": "3"},
  61. "priceCount": {"priceField": "9000"}
  62. },
  63. {
  64. "orderName": {"namefield": "路由器"},
  65. "orderCount": {"countField": "2"},
  66. "priceCount": {"priceField": "1000"}
  67. },
  68. {
  69. "orderName": {"namefield": "网线"},
  70. "orderCount": {"countField": "10"},
  71. "priceCount": {"priceField": "200"}
  72. }
  73. ]
  74. }
  75. };
  76. }
  77. },
  78. _loadHtml: function(){
  79. this.container.set("html", this.html);
  80. this.node = this.container.getFirst();
  81. this.node.setStyle("overflow", "hidden");
  82. this.node.addEvent("selectstart", function(e){
  83. var select = "text";
  84. if (e.target.getStyle("-webkit-user-select")){
  85. select = e.target.getStyle("-webkit-user-select").toString().toLowerCase();
  86. }
  87. if (select!="text" && select!="auto") e.preventDefault();
  88. });
  89. },
  90. _loadForm: function(){
  91. this._loadStyles();
  92. this._loadCssLinks();
  93. this._loadScriptSrc();
  94. this._loadJsheader();
  95. this._loadEvents();
  96. },
  97. _loadStyles: function(){
  98. this.node.setStyles(this.json.styles);
  99. },
  100. _loadCssLinks: function(){
  101. var urls = this.json.cssLinks;
  102. urls.each(function(url){
  103. new Element("link", {
  104. "rel": "stylesheet",
  105. "type": "text/css",
  106. "href": url
  107. }).inject($(document.head));
  108. });
  109. },
  110. _loadScriptSrc: function(){
  111. var urls = this.json.scriptSrc;
  112. urls.each(function(url){
  113. new Element("script", {
  114. "src": url
  115. }).inject($(document.head));
  116. });
  117. },
  118. _loadJsheader: function(){
  119. var code = this.json.jsheader.code;
  120. if (code) Browser.exec(code);
  121. },
  122. _loadEvents: function(){
  123. debugger;
  124. Object.each(this.json.events, function(e, key){
  125. if (e.code){
  126. if (this.options.moduleEvents.indexOf(key)!=-1){
  127. this.addEvent(key, function(event){
  128. return this.Macro.fire(e.code, this, event);
  129. }.bind(this));
  130. }else{
  131. if (key=="load"){
  132. this.addEvent("postLoad", function(){
  133. return this.Macro.fire(e.code, this);
  134. }.bind(this));
  135. }else if (key=="submit"){
  136. this.addEvent("beforeProcess", function(){
  137. return this.Macro.fire(e.code, this);
  138. }.bind(this));
  139. }else{
  140. this.node.addEvent(key, function(event){
  141. return this.Macro.fire(e.code, this, event);
  142. }.bind(this));
  143. }
  144. }
  145. }
  146. }.bind(this));
  147. },
  148. _getDomjson: function(dom){
  149. var mwfType = dom.get("MWFtype");
  150. switch (mwfType) {
  151. case "form":
  152. return this.json;
  153. case "":
  154. return null;
  155. default:
  156. var id = dom.get("id");
  157. if (!id) id = dom.get("MWFId");
  158. if (id){
  159. return this.json.moduleList[id];
  160. }else{
  161. return null;
  162. }
  163. }
  164. },
  165. _getModuleNodes: function(dom){
  166. var moduleNodes = [];
  167. var subDom = dom.getFirst();
  168. while (subDom){
  169. if (subDom.get("MWFtype")){
  170. var type = subDom.get("MWFtype");
  171. if (type.indexOf("$")==-1){
  172. moduleNodes.push(subDom);
  173. }
  174. if (subDom.get("MWFtype") != "datagrid"){
  175. moduleNodes = moduleNodes.concat(this._getModuleNodes(subDom));
  176. }
  177. }else{
  178. moduleNodes = moduleNodes.concat(this._getModuleNodes(subDom));
  179. }
  180. subDom = subDom.getNext();
  181. }
  182. return moduleNodes;
  183. },
  184. _loadModules: function(dom){
  185. //var subDom = this.node.getFirst();
  186. //while (subDom){
  187. // if (subDom.get("MWFtype")){
  188. // var json = this._getDomjson(subDom);
  189. // var module = this._loadModule(json, subDom);
  190. // this.modules.push(module);
  191. // }
  192. // subDom = subDom.getNext();
  193. //}
  194. var moduleNodes = this._getModuleNodes(dom);
  195. //alert(moduleNodes.length);
  196. moduleNodes.each(function(node){
  197. var json = this._getDomjson(node);
  198. var module = this._loadModule(json, node);
  199. this.modules.push(module);
  200. }.bind(this));
  201. },
  202. _loadModule: function(json, node, beforeLoad){
  203. var module = new MWF["APP"+json.type](node, json, this);
  204. if (beforeLoad) beforeLoad.apply(module);
  205. if (!this.all[json.id]) this.all[json.id] = module;
  206. if (module.field){
  207. if (!this.forms[json.id]) this.forms[json.id] = module;
  208. }
  209. module.readonly = this.options.readonly;
  210. module.load();
  211. return module;
  212. },
  213. getData: function(){
  214. var data= Object.clone(this.businessData.data);
  215. Object.each(this.forms, function(module, id){
  216. if (module.json.section=="yes"){
  217. data[id] = this.getSectionData(module, data[id]);
  218. }else{
  219. data[id] = module.getData();
  220. }
  221. }.bind(this));
  222. this.businessData.data = data;
  223. this.Macro.environment.setData(this.businessData.data);
  224. return data;
  225. },
  226. getSectionData: function(module, obj){
  227. var v = module.getData();
  228. switch (module.json.sectionBy){
  229. case "person":
  230. return this.getSectionDataByPerson(v, obj);
  231. break;
  232. case "department":
  233. return this.getSectionDataByDepartment(v, obj);
  234. break;
  235. case "activity":
  236. return this.getSectionDataByPActivity(v, obj);
  237. break;
  238. case "script":
  239. return this.getSectionDataByScript(module.json.sectionByScript.code, v, obj);
  240. break;
  241. default:
  242. return v;
  243. }
  244. },
  245. getSectionDataByPerson: function(v, obj) {
  246. var key = layout.desktop.session.user.id;
  247. if (!obj || (typeOf(obj)!="object")) obj={};
  248. obj[key] = v;
  249. return obj;
  250. },
  251. getSectionDataByDepartment: function(v, obj) {
  252. var key = (this.businessData.task) ? this.businessData.task.department : "";
  253. if (!obj || (typeOf(obj)!="object")) obj={};
  254. if (key) obj[key] = v;
  255. return obj;
  256. },
  257. getSectionDataByPActivity: function(v, obj) {
  258. var key = (this.businessData.work) ? this.businessData.work.activity : "";
  259. if (!obj || (typeOf(obj)!="object")) obj={};
  260. if (key) obj[key] = v;
  261. return obj;
  262. },
  263. getSectionDataByScript: function(code, v, obj) {
  264. var key = this.form.Macro.exec(code, this);
  265. if (!obj || (typeOf(obj)!="object")) obj={};
  266. if (key) obj[key] = v;
  267. return obj;
  268. },
  269. saveWork: function(callback){
  270. if (this.businessData.control["allowSave"]){
  271. this.fireEvent("beforeSave");
  272. this.workAction.saveData(function(json){
  273. this.notice(MWF.xApplication.process.Xform.LP.dataSaved, "success");
  274. if (callback) callback();
  275. this.fireEvent("afterSave");
  276. }.bind(this), null, this.businessData.work.id, this.getData());
  277. }else{
  278. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "Permission Denied");
  279. //if (failure) failure(null, "Permission Denied", "");
  280. }
  281. },
  282. closeWork: function(){
  283. this.fireEvent("beforeClose");
  284. if (this.app){
  285. this.app.close();
  286. // this.fireEvent("afterClose");
  287. }
  288. },
  289. addMessage: function(data){
  290. var content = ""
  291. if (data.length){
  292. data.each(function(work){
  293. var users = [];
  294. work.taskList.each(function(task){
  295. users.push(task.person+"("+task.department+")");
  296. }.bind(this));
  297. content += "<div><b>"+MWF.xApplication.process.Xform.LP.nextActivity+"<font style=\"color: #ea621f\">"+work.fromActivityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>"
  298. }.bind(this));
  299. }else{
  300. content += MWF.xApplication.process.Xform.LP.workCompleted;
  301. }
  302. //data.workList.each(function(list){
  303. // content += "<div><b>"+MWF.xApplication.process.Xform.LP.nextActivity+"<font style=\"color: #ea621f\">"+list.activityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+list.personList.join(", ")+"</font></b></div>"
  304. //}.bind(this));
  305. var msg = {
  306. "subject": MWF.xApplication.process.Xform.LP.taskProcessed,
  307. "content": "<div>"+MWF.xApplication.process.Xform.LP.taskProcessedMessage+"“"+this.businessData.work.title+"”</div>"+content
  308. };
  309. layout.desktop.message.addTooltip(msg);
  310. return layout.desktop.message.addMessage(msg);
  311. },
  312. formValidation: function(routeName, opinion){
  313. if (this.options.readonly) return true;
  314. this.Macro.environment.form.currentRouteName = routeName;
  315. this.Macro.environment.form.opinion = opinion;
  316. var flag = true;
  317. //flag = this.validation();
  318. Object.each(this.forms, function(field, key){
  319. field.validationMode();
  320. if (!field.validation(routeName, opinion)) flag = false;
  321. }.bind(this));
  322. return flag;
  323. },
  324. validation: function(routeName, opinion, processor){
  325. this.Macro.environment.form.currentRouteName = routeName;
  326. this.Macro.environment.form.opinion = opinion;
  327. var routeFlag = this.validationRoute(processor);
  328. var opinionFlag = this.validationOpinion(processor);
  329. return routeFlag && opinionFlag;
  330. },
  331. validationRoute: function(processor){
  332. if (!this.json.validationRoute) return true;
  333. if (!this.json.validationRoute.code) return true;
  334. var flag = this.Macro.exec(this.json.validationRoute.code, this);
  335. if (!flag) flag = MWF.xApplication.process.Xform.LP.notValidation;
  336. if (flag.toString()!="true"){
  337. this.notValidationRouteMode(flag, processor);
  338. return false;
  339. }
  340. return true;
  341. },
  342. validationOpinion: function(processor){
  343. if (!this.json.validationOpinion) return true;
  344. if (!this.json.validationOpinion.code) return true;
  345. var flag = this.Macro.exec(this.json.validationOpinion.code, this);
  346. if (!flag) flag = MWF.xApplication.process.Xform.LP.notValidation;
  347. if (flag.toString()!="true"){
  348. this.notValidationOpinionMode(flag, processor);
  349. return false;
  350. }
  351. return true;
  352. },
  353. notValidationRouteMode: function(flag, processor){
  354. processor.routeSelectorArea.setStyle("background-color", "#ffe9e9");
  355. new mBox.Notice({
  356. type: "error",
  357. position: {"x": "center", "y": "top"},
  358. move: false,
  359. target: processor.routeSelectorArea,
  360. delayClose: 6000,
  361. content: flag
  362. });
  363. },
  364. notValidationOpinionMode: function(flag, processor){
  365. processor.inputTextarea.setStyle("background-color", "#ffe9e9");
  366. new mBox.Notice({
  367. type: "error",
  368. position: {"x": "center", "y": "top"},
  369. move: false,
  370. target: processor.inputTextarea,
  371. delayClose: 6000,
  372. content: flag
  373. });
  374. },
  375. //fireRtEvent: function(type, args, delay){
  376. // type = removeOn(type);
  377. // var events = this.$events[type];
  378. // if (!events) return this;
  379. // if (!events.length) return this;
  380. // var event = events[events.length-1];
  381. // args = Array.from(args);
  382. // if (delay) fn.delay(delay, this, args);
  383. // else return fn.apply(this, args);
  384. // return this;
  385. //},
  386. submitWork: function(routeName, opinion, callback, processor){
  387. if (!this.businessData.control["allowProcessing"]){
  388. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "Permission Denied");
  389. this.app.content.unmask();
  390. processor.node.unmask();
  391. return false;
  392. }
  393. if (!this.formValidation(routeName, opinion)){
  394. this.app.content.unmask();
  395. //this.app.notice("", "error", target, where, offset);
  396. if (callback) callback();
  397. return false;
  398. }
  399. if (!this.validation(routeName, opinion, processor)){
  400. //this.app.content.unmask();
  401. processor.node.unmask();
  402. return false;
  403. }
  404. if (!opinion) opinion = routeName;
  405. this.fireEvent("beforeProcess");
  406. MWF.require("MWF.widget.Mask", function(){
  407. this.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  408. this.mask.loadNode(this.app.content);
  409. this.fireEvent("beforeSave");
  410. this.workAction.saveData(function(json){
  411. this.businessData.task.routeName = routeName;
  412. this.businessData.task.opinion = opinion;
  413. this.fireEvent("afterSave");
  414. this.workAction.processTask(function(json){
  415. //if (processor) processor.destroy();
  416. //if (processNode) processNode.destroy();
  417. if (callback) callback();
  418. this.fireEvent("afterProcess");
  419. // this.notice(MWF.xApplication.process.Xform.LP.taskProcessed, "success");
  420. this.addMessage(json.data);
  421. if (this.app.taskObject) this.app.taskObject.destroy();
  422. this.app.close();
  423. //window.setTimeout(function(){this.app.close();}.bind(this), 2000);
  424. }.bind(this), null, this.businessData.task.id, this.businessData.task);
  425. }.bind(this), null, this.businessData.work.id, this.getData());
  426. }.bind(this));
  427. },
  428. processWork: function(){
  429. if (this.app.inBrowser){
  430. this.app.content.setStyle("height", document.body.getSize().y);
  431. }
  432. this.app.content.mask({
  433. "destroyOnHide": true,
  434. "style": this.app.css.maskNode
  435. });
  436. if (!this.formValidation("", "")){
  437. this.app.content.unmask();
  438. // if (callback) callback();
  439. return false;
  440. }
  441. var processNode = this.createProcessNode();
  442. this.setProcessNode(processNode);
  443. this.showProcessNode(processNode);
  444. },
  445. createProcessNode: function(){
  446. var processNode = new Element("div", {"styles": this.app.css.processNode_from}).inject(this.app.content);
  447. processNode.position({
  448. relativeTo: this.app.content,
  449. position: "topcenter",
  450. edge: "topcenter"
  451. });
  452. return processNode;
  453. },
  454. setProcessNode: function(processNode){
  455. var _self = this;
  456. MWF.xDesktop.requireApp("process.Work", "Processor", function(){
  457. new MWF.xApplication.process.Work.Processor(processNode, this.businessData.task, {
  458. "onCancel": function(){
  459. processNode.destroy();
  460. _self.app.content.unmask();
  461. delete this;
  462. },
  463. "onSubmit": function(routeName, opinion){
  464. _self.submitWork(routeName, opinion, function(){
  465. this.destroy();
  466. processNode.destroy();
  467. delete this;
  468. }.bind(this), this);
  469. }
  470. })
  471. }.bind(this));
  472. },
  473. showProcessNode: function(processNode){
  474. var size = this.app.content.getSize();
  475. var nodeSize = processNode.getSize();
  476. var top = size.y/2-nodeSize.y/2-20;
  477. var left = size.x/2-nodeSize.x/2;
  478. if (top<0) top = 0;
  479. this.app.css.processNode.top = ""+top+"px";
  480. this.app.css.processNode.left = ""+left+"px";
  481. var morph = new Fx.Morph(processNode, {
  482. "duration": 300,
  483. "transition": Fx.Transitions.Expo.easeOut
  484. });
  485. morph.start(this.app.css.processNode);
  486. },
  487. confirm: function(type, e, title, text, width, height, ok, cancel, callback){
  488. MWF.require("MWF.xDesktop.Dialog", function(){
  489. var size = this.container.getSize();
  490. var x = parseFloat((Browser.name=="firefox") ? e.event.clientX : e.event.x);
  491. var y = parseFloat((Browser.name=="firefox") ? e.event.clientY : e.event.y);
  492. if (x+parseFloat(width)>size.x){
  493. x = x-parseFloat(width);
  494. }
  495. var dlg = new MWF.xDesktop.Dialog({
  496. "title": title,
  497. "style": "flat",
  498. "top": y,
  499. "left": x-20,
  500. "fromTop":e.event.y,
  501. "fromLeft": (Browser.name=="firefox") ? e.event.clientX-20 : e.event.x-20,
  502. "width": width,
  503. "height": height,
  504. "text": text,
  505. "container": this.content,
  506. "buttonList": [
  507. {
  508. "text": MWF.LP.process.button.ok,
  509. "action": ok
  510. },
  511. {
  512. "text": MWF.LP.process.button.cancel,
  513. "action": cancel
  514. }
  515. ]
  516. });
  517. switch (type.toLowerCase()){
  518. case "success":
  519. dlg.content.setStyle("background-image", "url(data:image/png;base64,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)");
  520. break;
  521. case "error":
  522. dlg.content.setStyle("background-image", "url(data:image/png;base64,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)");
  523. break;
  524. case "info":
  525. dlg.content.setStyle("background-image", "url(data:image/png;base64,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)");
  526. break;
  527. case "warn":
  528. dlg.content.setStyle("background-image", "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABgtJREFUeNqsWG2IlFUUft6vmdlZd539GFdTY5VMomy1oBJUSPLXkmQt5I8gCIMK+iH0K4ooEvtTRP7JX9JKWCC1mUUkIkQKSoaZH60t2pboOK37Mc6Ozsw779t57t5xx5ndnTvhC4d373nnnnPuOeee85y1Jr+G6dNcCrBB6AnbQo9tY4UFLLYstIYhMsK/IjRULOF0voATx87jp60fICPygzmFbpn+26pnzK0ilrk2+kTp5kgC6+w4YDfJxpiQJ+QAYUmoKHQLCG4K5YDsCI7fzOPgcBr7172BP0VUILrC/22MnHSbvF6KLcRap1WMmGfsRQRZ2Z8BJv7BybEs9t6/DbuFXaj2VKUx7ize6BZvbHcdvB67D5bdrD/ocwUiruiLZPFGSbziiHci4iVPpEn41MM9pPZWPBofwiOX9uDh05fwkSgf5Dln8lKNZwo+HnRsvBVbjK1eJ39RdWIxJCfhGB0HxjNTBtGQhHiuPQHEY9MG3X5EbXEESA3i4KmL2Ln5Xfwi3CINmjVM9IjnYGeTGOJ2zOx+SU5cE8Hp/DMIopvgxFejlDsFO38IC6ID6JIDRCMz7/WvA1cG8d2PJ/H2y5/gLA2a9ndVmBia2CIxpL3yJ1XG5MUzTh8S3e/B9Zo09x74xSeRS7vyfT+i3sx7KXfRCvSuz2NUltuFJmhj+btdmazMEa+NsZidfIYlsQXzE51oa2tDV1eXenNNPr/PtZ/ylybxwtEP8Ypw4pU22OXrq27NvZIh4dzCeI07lvQiHo8jFovBdV315pp8fp9rP+VTT/cCPL/jRawSTqScma4OT1+sA2vtqN4w552V03meMsKyprLblowlj2s/qC+DepJLsWpjD56T5aDOnRI908yC5jTVOVEl1THWhKhPwrVx/UNYqL0DmyU+0iyVNWooKKxjTGgmh/o6k+h5tRcbhBNTDla9JtKAV+6SZ5RBondZF9YwOkKOq5qeZ6CkUpmJMQYP9Xa0YqX8ySRxXdV9bXMBloShnLg134RvhQ3IEr2tTViqc8ZxNQwwFuCJANsqiOJ4jSHke40cTPQ2RdFZNsYmHrEaiHVEmqI/drTGO+paC5/fTWVRghTaZl1ibJvAqG6hqqygIsG+/iXCID8VFk1ck+9Z5rKoV8BYThc9yyVCE2A0nyDJKOmEoiP98GV7mNwKO7EOwfjPwL9fKL7q2CUzWTRGANiILgghjRkKfTwAyxw4cWt4pR+F4X72NAn2FIxQzg4aECMtcmISl3WzDFxi1sDH046hZ4JQ45kbgmeyFXhGUGB7i8YzhgcTvbg2jiHCKPrTJXgmE56ZgKIoH5XGn/YEz3QLnpm/GrcmTiE9dkiOOaBuU9QzN+bsMM7dNoYo/qk1OC597vEahDbDU5BtuVbBMysr8ExS45lBV74LnjHwMhFjahRndn2rUN9NhsrmOEEUX/LNbgB/F13yLBJtyTvwDNfkNyLnj8s4dv5vBbQmVdcmWuc4IYl0MjC44jz0guWb0NLSojAMoQTfXJPvGNQs6hGvnNt7GIeFkyGk4hcVGM41HCcEZIV1ix53jJ+QieDOWKi18CN2fWOo58QF/PD5ETVPZXTO3IZ8Aeea9Dj2FOt4R7WDq1L0SlVFT9bke3WMofzf/8I3fTvwlXAYomy5IChj9AxT4FyTmsBBPyyXoVpSRe9qP8LfXkNw7ZAaIfnmmnwbs++l3AspHPl4APuEw2I3pr0S1owqMsO4B97BYz3L8eaiFvR6uHsPceWFNI7s/h6f7TqgblBq1umgPCRwwOJcc3EEe3NsOXN4yYRUkRQ5vw5j4P19+FQbkha6Ud04aiZK8Y6lS2ALxwmi+GQcqxyGKDT3RCBSSkKpLM4xWXWOjGi6UXeirDKI1yXOcYIonuC5s1lQoTbKKlPZCdYUBZpSGZxhHeH11bdmVOdIrnLWNv4vhPzQ1sBnHlE8wTMxK6EiERqBEfEIYQC7L5seew1LPCurLmgZTdl6/4UwaWmWzq2IRvHNGrNGNLmYdpCvb0dBl/hJXdAKJrOF1eClsHX4XP12NM+qGFJKmnz9NgYV/wkwAMYATK0QLuhAAAAAAElFTkSuQmCC)");
  529. break;
  530. default:
  531. }
  532. dlg.show();
  533. }.bind(this));
  534. },
  535. notice: function(content, type, target, where){
  536. if (!where) where = {"x": "right", "y": "top"};
  537. if (!target) target = this.node;
  538. if (!type) type = "ok";
  539. var noticeTarget = target || layout.layout.contentNode;
  540. new mBox.Notice({
  541. type: type,
  542. position: where,
  543. move: false,
  544. target: noticeTarget,
  545. delayClose: (type=="error") ? 5000 : 1000,
  546. offset: {
  547. x: 10,
  548. y: where.y.toString().toLowerCase()=="bottom" ? 10 : 10
  549. },
  550. content: content
  551. });
  552. },
  553. resetWork: function(){
  554. if (!this.businessData.control["allowReset"]){
  555. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "Permission Denied");
  556. return false;
  557. }
  558. MWF.require("MWF.xDesktop.Dialog", function(){
  559. var width = 680;
  560. var height = 300;
  561. var p = MWF.getCenterPosition(this.app.content, width, height);
  562. var _self = this;
  563. var dlg = new MWF.xDesktop.Dialog({
  564. "title": this.app.lp.reset,
  565. "style": "work",
  566. "top": p.y-100,
  567. "left": p.x,
  568. "fromTop": p.y-100,
  569. "fromLeft": p.x,
  570. "width": width,
  571. "height": height,
  572. "url": this.app.path+"reset.html",
  573. "container": this.app.content,
  574. "isClose": true,
  575. "onPostShow": function(){
  576. $("resetWork_okButton").addEvent("click", function(){
  577. _self.doResetWork(this);
  578. }.bind(this));
  579. $("resetWork_cancelButton").addEvent("click", function(){
  580. this.close();
  581. }.bind(this));
  582. $("resetWork_selPeopleButton").addEvent("click", function(){
  583. _self.selectPeople(this);
  584. }.bind(this));
  585. }
  586. });
  587. dlg.show();
  588. }.bind(this));
  589. },
  590. selectPeople: function(dlg){
  591. var range = this.businessData.activity.resetRange || "department";
  592. var count = this.businessData.activity.resetCount || 0;
  593. switch (range){
  594. case "department":
  595. this.personActions.getDepartmentByIdentity(function(json){
  596. this.selectPeopleDepartment(dlg, json.data, count);
  597. }.bind(this), null, this.businessData.task.identity);
  598. break;
  599. case "company":
  600. this.personActions.getCompanyByIdentity(function(json){
  601. this.selectPeopleCompany(dlg, json.data, count)
  602. }.bind(this), null, this.businessData.task.identity);
  603. break;
  604. default:
  605. this.selectPeopleAll(dlg, count);
  606. }
  607. },
  608. selectPeopleDepartment: function(dlg, department, count){
  609. var names = dlg.identityList || [];
  610. var areaNode = $("resetWork_selPeopleArea");
  611. var options = {
  612. "names": names,
  613. "type": "identity",
  614. "count": count,
  615. "departments": (department) ? [department.name]: [],
  616. "title": this.app.lp.reset,
  617. "onComplete": function (items) {
  618. areaNode.empty();
  619. var identityList = [];
  620. items.each(function(item){
  621. var explorer = {
  622. "actions": this.personActions,
  623. "app": {"lp": this.app.lp}
  624. }
  625. debugger;
  626. new MWF.widget.Identity(item.data, areaNode, explorer, false, null, {"style": "reset"});
  627. identityList.push(item.data.name);
  628. }.bind(this));
  629. dlg.identityList = identityList;
  630. }.bind(this)
  631. };
  632. var selector = new MWF.OrgSelector(this.app.content, options);
  633. },
  634. selectPeopleCompany: function(dlg, company, count){
  635. var names = dlg.identityList || [];
  636. var areaNode = $("resetWork_selPeopleArea");
  637. var options = {
  638. "names": names,
  639. "type": "identity",
  640. "count": count,
  641. "companys": [company.name],
  642. "title": this.app.lp.reset,
  643. "onComplete": function (items) {
  644. areaNode.empty();
  645. var identityList = [];
  646. items.each(function(item){
  647. var explorer = {
  648. "actions": this.personActions,
  649. "app": {"lp": this.app.lp}
  650. };
  651. debugger;
  652. new MWF.widget.Identity(item.data, areaNode, explorer, false, null, {"style": "reset"});
  653. identityList.push(item.data.name);
  654. }.bind(this));
  655. dlg.identityList = identityList;
  656. }.bind(this)
  657. };
  658. var selector = new MWF.Selector(this.app.content, options);
  659. },
  660. selectPeopleAll: function(dlg, count){
  661. var names = dlg.identityList || [];
  662. var areaNode = $("resetWork_selPeopleArea");
  663. var options = {
  664. "names": names,
  665. "type": "identity",
  666. "count": count,
  667. "title": this.app.lp.reset,
  668. "onComplete": function (items) {
  669. areaNode.empty();
  670. var identityList = [];
  671. items.each(function(item){
  672. var explorer = {
  673. "actions": this.personActions,
  674. "app": {"lp": this.app.lp}
  675. };
  676. debugger;
  677. new MWF.widget.Identity(item.data, areaNode, explorer, false, null, {"style": "reset"});
  678. identityList.push(item.data.name);
  679. }.bind(this));
  680. dlg.identityList = identityList;
  681. }.bind(this)
  682. };
  683. var selector = new MWF.Selector(this.app.content, options);
  684. },
  685. doResetWork: function(dlg){
  686. var names = dlg.identityList || [];
  687. if (!names.length){
  688. this.app.notice(MWF.xApplication.process.Xform.LP.inputResetPeople, "error", dlg.node);
  689. return false;
  690. }
  691. var opinion = $("resetWork_opinion").get("value");
  692. if (!opinion){
  693. opinion = MWF.xApplication.process.Xform.LP.resetTo+": "+names.join(", ");
  694. }
  695. MWF.require("MWF.widget.Mask", function(){
  696. this.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  697. this.mask.loadNode(this.app.content);
  698. this.fireEvent("beforeReset");
  699. this.resetWorkToPeson(names, opinion, function(){
  700. this.workAction.getJobByWork(function(workJson){
  701. this.addResetMessage(workJson.data);
  702. this.app.notice(MWF.xApplication.process.Xform.LP.resetOk+": "+names.join(", "), "success");
  703. this.app.close();
  704. }.bind(this), null, this.businessData.work.id)
  705. dlg.close();
  706. if (this.mask) {this.mask.hide(); this.mask = null;}
  707. }.bind(this), function(xhr, text, error){
  708. var errorText = error+":"+text;
  709. if (xhr) errorText = xhr.responseText;
  710. this.app.notice("request json error: "+errorText, "error", dlg.node);
  711. if (this.mask) {this.mask.hide(); this.mask = null;}
  712. }.bind(this));
  713. }.bind(this));
  714. //var data = {
  715. // "opinion": opinion,
  716. // "routeName": MWF.xApplication.process.Xform.LP.reset,
  717. // "identityList": names
  718. //}
  719. //
  720. //this.workAction.resetWork(function(json){
  721. //
  722. //}.bind(this), null, this.businessData.task.id, data);
  723. },
  724. resetWorkToPeson: function(identityList, opinion, success, failure){
  725. var data = {
  726. "opinion": opinion,
  727. "routeName": MWF.xApplication.process.Xform.LP.reset,
  728. "identityList": identityList
  729. }
  730. this.workAction.saveData(
  731. function(json){
  732. this.workAction.resetWork(
  733. function(json){
  734. if (success) success();
  735. }.bind(this),
  736. function(xhr, text, error){
  737. if (failure) failure(xhr, text, error);
  738. },
  739. this.businessData.task.id, data
  740. );
  741. }.bind(this),
  742. function(xhr, text, error){
  743. if (failure) failure(xhr, text, error);
  744. },
  745. this.businessData.work.id, this.getData()
  746. );
  747. },
  748. addResetMessage: function(data){
  749. var users = [];
  750. data.taskList.each(function(task){
  751. users.push(task.person+"("+task.department+")");
  752. }.bind(this));
  753. var content = "<div><b>"+MWF.xApplication.process.Xform.LP.currentActivity+"<font style=\"color: #ea621f\">"+data.work.activityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>"
  754. var msg = {
  755. "subject": MWF.xApplication.process.Xform.LP.workReset,
  756. "content": "<div>"+MWF.xApplication.process.Xform.LP.resetWorkInfor+"“"+this.businessData.work.title+"”</div>"+content
  757. };
  758. layout.desktop.message.addTooltip(msg);
  759. return layout.desktop.message.addMessage(msg);
  760. },
  761. retractWork: function(e, ev){
  762. var _self = this;
  763. var p = MWF.getCenterPosition(this.app.content, 300, 150);
  764. var event = {
  765. "event":{
  766. "x": p.x,
  767. "y": p.y-200,
  768. "clientX": p.x,
  769. "clientY": p.y-200
  770. }
  771. }
  772. this.app.confirm("infor", event, MWF.xApplication.process.Xform.LP.retractTitle, MWF.xApplication.process.Xform.LP.retractText, 300, 120, function(){
  773. _self.app.content.mask({
  774. "style": {
  775. "background-color": "#999",
  776. "opacity": 0.6
  777. }
  778. });
  779. MWF.require("MWF.widget.Mask", function(){
  780. _self.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  781. _self.mask.loadNode(_self.app.content);
  782. _self.fireEvent("beforeRetract");
  783. _self.doRetractWork(function(){
  784. _self.workAction.getJobByWork(function(workJson){
  785. _self.app.notice(MWF.xApplication.process.Xform.LP.workRetract, "success");
  786. _self.app.content.unmask();
  787. _self.app.reload(workJson.data);
  788. }, null, _self.businessData.work.id);
  789. this.close();
  790. if (_self.mask) {_self.mask.hide(); _self.mask = null;}
  791. }.bind(this));
  792. }.bind(this), function(xhr, text, error){
  793. var errorText = error+":"+text;
  794. if (xhr) errorText = xhr.responseText;
  795. _self.app.notice("request json error: "+errorText, "error", dlg.node);
  796. if (_self.mask) {_self.mask.hide(); _self.mask = null;}
  797. });
  798. //this.close();
  799. }, function(){
  800. this.close();
  801. });
  802. },
  803. doRetractWork: function(success, failure){
  804. debugger;
  805. if (this.businessData.control["allowRetract"]){
  806. this.workAction.retractWork(function(json){
  807. if (success) success();
  808. }.bind(this), function(xhr, text, error){
  809. if (failure) failure(xhr, text, error);
  810. }, this.businessData.work.id);
  811. }else{
  812. if (failure) failure(null, "Permission Denied", "");
  813. }
  814. },
  815. addRetractMessage: function(data){
  816. var users = [];
  817. data.taskList.each(function(task){
  818. users.push(task.person+"("+task.department+")");
  819. }.bind(this));
  820. var content = "<div><b>"+MWF.xApplication.process.Xform.LP.currentActivity+"<font style=\"color: #ea621f\">"+data.work.activityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>"
  821. var msg = {
  822. "subject": MWF.xApplication.process.Xform.LP.workRetract,
  823. "content": "<div>"+MWF.xApplication.process.Xform.LP.retractWorkInfor+"“"+this.businessData.work.title+"”</div>"+content
  824. };
  825. layout.desktop.message.addTooltip(msg);
  826. return layout.desktop.message.addMessage(msg);
  827. },
  828. rerouteWork: function(e, ev){
  829. if (!this.businessData.control["allowReroute"]){
  830. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "Permission Denied");
  831. return false;
  832. }
  833. MWF.require("MWF.xDesktop.Dialog", function(){
  834. var width = 480;
  835. var height = 160;
  836. var p = MWF.getCenterPosition(this.app.content, width, height);
  837. var _self = this;
  838. var dlg = new MWF.xDesktop.Dialog({
  839. "title": this.app.lp.reroute,
  840. "style": "work",
  841. "top": p.y-100,
  842. "left": p.x,
  843. "fromTop": p.y-100,
  844. "fromLeft": p.x,
  845. "width": width,
  846. "height": height,
  847. "url": this.app.path+"reroute.html",
  848. "container": this.app.content,
  849. "isClose": true,
  850. "onPostShow": function(){
  851. $("rerouteWork_okButton").addEvent("click", function(){
  852. _self.doRerouteWork(this);
  853. }.bind(this));
  854. $("rerouteWork_cancelButton").addEvent("click", function(){
  855. this.close();
  856. }.bind(this));
  857. var select = $("rerouteWork_selectActivity");
  858. _self.workAction.getRerouteTo(_self.businessData.work.process, function(json){
  859. json.data.agentList.each(function(activity){
  860. new Element("option", {
  861. "value": activity.id+"#agent",
  862. "text": activity.name
  863. }).inject(select);
  864. }.bind(_self));
  865. json.data.cancelList.each(function(activity){
  866. new Element("option", {
  867. "value": activity.id+"#cancel",
  868. "text": activity.name
  869. }).inject(select);
  870. }.bind(_self));
  871. json.data.choiceList.each(function(activity){
  872. new Element("option", {
  873. "value": activity.id+"#choice",
  874. "text": activity.name
  875. }).inject(select);
  876. }.bind(_self));
  877. json.data.conditionList.each(function(activity){
  878. new Element("option", {
  879. "value": activity.id+"#condition",
  880. "text": activity.name
  881. }).inject(select);
  882. }.bind(_self));
  883. json.data.delayList.each(function(activity){
  884. new Element("option", {
  885. "value": activity.id+"#delay",
  886. "text": activity.name
  887. }).inject(select);
  888. }.bind(_self));
  889. json.data.embedList.each(function(activity){
  890. new Element("option", {
  891. "value": activity.id+"#embed",
  892. "text": activity.name
  893. }).inject(select);
  894. }.bind(_self));
  895. json.data.endList.each(function(activity){
  896. new Element("option", {
  897. "value": activity.id+"#end",
  898. "text": activity.name
  899. }).inject(select);
  900. }.bind(_self));
  901. json.data.invokeList.each(function(activity){
  902. new Element("option", {
  903. "value": activity.id+"#invoke",
  904. "text": activity.name
  905. }).inject(select);
  906. }.bind(_self));
  907. json.data.manualList.each(function(activity){
  908. new Element("option", {
  909. "value": activity.id+"#manual",
  910. "text": activity.name
  911. }).inject(select);
  912. }.bind(_self));
  913. json.data.mergeList.each(function(activity){
  914. new Element("option", {
  915. "value": activity.id+"#merge",
  916. "text": activity.name
  917. }).inject(select);
  918. }.bind(_self));
  919. json.data.messageList.each(function(activity){
  920. new Element("option", {
  921. "value": activity.id+"#message",
  922. "text": activity.name
  923. }).inject(select);
  924. }.bind(_self));
  925. json.data.parallelList.each(function(activity){
  926. new Element("option", {
  927. "value": activity.id+"#parallel",
  928. "text": activity.name
  929. }).inject(select);
  930. }.bind(_self));
  931. json.data.serviceList.each(function(activity){
  932. new Element("option", {
  933. "value": activity.id+"#service",
  934. "text": activity.name
  935. }).inject(select);
  936. }.bind(_self));
  937. json.data.splitList.each(function(activity){
  938. new Element("option", {
  939. "value": activity.id+"#split",
  940. "text": activity.name
  941. }).inject(select);
  942. }.bind(_self));
  943. }.bind(_self));
  944. }
  945. });
  946. dlg.show();
  947. }.bind(this));
  948. },
  949. doRerouteWork: function(dlg){
  950. var opinion = $("rerouteWork_opinion").get("value");
  951. var select = $("rerouteWork_selectActivity");
  952. var activity = select.options[select.selectedIndex].get("value");
  953. var activityName = select.options[select.selectedIndex].get("text");
  954. var tmp = activity.split("#");
  955. activity = tmp[0];
  956. var type = tmp[1];
  957. MWF.require("MWF.widget.Mask", function(){
  958. this.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  959. this.mask.loadNode(this.app.content);
  960. this.fireEvent("beforeReroute");
  961. this.rerouteWorkToActivity(activity, type, opinion, function(){
  962. this.workAction.getJobByWork(function(workJson){
  963. this.addRerouteMessage(workJson.data);
  964. this.app.notice(MWF.xApplication.process.Xform.LP.rerouteOk+": "+activityName, "success");
  965. this.app.close();
  966. }.bind(this), null, this.businessData.work.id);
  967. dlg.close();
  968. if (this.mask) {this.mask.hide(); this.mask = null;}
  969. }.bind(this), function(xhr, text, error){
  970. var errorText = error+":"+text;
  971. if (xhr) errorText = xhr.responseText;
  972. this.app.notice("request json error: "+errorText, "error", dlg.node);
  973. if (this.mask) {this.mask.hide(); this.mask = null;}
  974. }.bind(this));
  975. }.bind(this));
  976. },
  977. rerouteWorkToActivity: function(activity, type, opinion, success, failure){
  978. if (this.businessData.task){
  979. this.workAction.saveData(function(json){
  980. this.workAction.rerouteWork(function(json){
  981. if (success) success();
  982. }.bind(this), function(xhr, text, error){
  983. if (failure) failure(xhr, text, error);
  984. }, this.businessData.work.id, activity, type);
  985. }.bind(this), function(xhr, text, error){
  986. if (failure) failure(xhr, text, error);
  987. }, this.businessData.work.id, this.getData());
  988. }else{
  989. this.workAction.rerouteWork(function(json){
  990. if (success) success();
  991. }.bind(this), function(xhr, text, error){
  992. if (failure) failure(xhr, text, error);
  993. }, this.businessData.work.id, activity, type);
  994. }
  995. },
  996. addRerouteMessage: function(data){
  997. var users = [];
  998. data.taskList.each(function(task){
  999. users.push(task.person+"("+task.department+")");
  1000. }.bind(this));
  1001. var content = "<div><b>"+MWF.xApplication.process.Xform.LP.currentActivity+"<font style=\"color: #ea621f\">"+data.work.activityName+"</font>, "+MWF.xApplication.process.Xform.LP.nextUser+"<font style=\"color: #ea621f\">"+users.join(", ")+"</font></b></div>"
  1002. var msg = {
  1003. "subject": MWF.xApplication.process.Xform.LP.workReroute,
  1004. "content": "<div>"+MWF.xApplication.process.Xform.LP.rerouteWorkInfor+"“"+this.businessData.work.title+"”</div>"+content
  1005. };
  1006. layout.desktop.message.addTooltip(msg);
  1007. return layout.desktop.message.addMessage(msg);
  1008. },
  1009. deleteWork: function(){
  1010. var _self = this;
  1011. var p = MWF.getCenterPosition(this.app.content, 380, 150);
  1012. var event = {
  1013. "event":{
  1014. "x": p.x,
  1015. "y": p.y-200,
  1016. "clientX": p.x,
  1017. "clientY": p.y-200
  1018. }
  1019. }
  1020. this.app.confirm("infor", event, MWF.xApplication.process.Xform.LP.deleteWorkTitle, MWF.xApplication.process.Xform.LP.deleteWorkText, 380, 120, function(){
  1021. //_self.app.content.mask({
  1022. // "style": {
  1023. // "background-color": "#999",
  1024. // "opacity": 0.6
  1025. // }
  1026. //});
  1027. MWF.require("MWF.widget.Mask", function(){
  1028. _self.mask = new MWF.widget.Mask({"style": "desktop", "zIndex": 50000});
  1029. _self.mask.loadNode(_self.app.content);
  1030. _self.fireEvent("beforeDelete");
  1031. _self.doDeleteWork(function(){
  1032. _self.app.notice(MWF.xApplication.process.Xform.LP.workDelete+": “"+_self.businessData.work.title+"”", "success");
  1033. _self.app.close();
  1034. this.close();
  1035. if (_self.mask) {_self.mask.hide(); _self.mask = null;}
  1036. }.bind(this),function(xhr, text, error){
  1037. var errorText = error+":"+text;
  1038. if (xhr) errorText = xhr.responseText;
  1039. _self.app.notice("request json error: "+errorText, "error", dlg.node);
  1040. if (_self.mask) {_self.mask.hide(); _self.mask = null;}
  1041. }.bind(this));
  1042. }.bind(this));
  1043. //_self.workAction.deleteWork(function(json){
  1044. // _self.app.notice(MWF.xApplication.process.Xform.LP.workDelete+": “"+_self.businessData.work.title+"”", "success");
  1045. // _self.app.close();
  1046. // this.close();
  1047. //}.bind(this), null, _self.businessData.work.id);
  1048. //this.close();
  1049. }, function(){
  1050. this.close();
  1051. });
  1052. },
  1053. doDeleteWork: function(success, failure){
  1054. if (this.businessData.control["allowDelete"]){
  1055. this.workAction.deleteWork(function(json){
  1056. if (success) success();
  1057. }.bind(this), function(xhr, text, error){
  1058. if (failure) failure(xhr, text, error);
  1059. }, this.businessData.work.id);
  1060. }else{
  1061. if (failure) failure(null, "Permission Denied", "");
  1062. }
  1063. },
  1064. //printWork: function(){
  1065. // var form = this.json.id;
  1066. // if (this.json.printForm){
  1067. // form = this.json.printForm;
  1068. // }
  1069. // window.open("/x_desktop/printWork.html?workid="+this.businessData.work.id+"&app="+this.businessData.work.application+"&form="+form);
  1070. //},
  1071. printWork: function(app, form){
  1072. var application = app || this.businessData.work.application;
  1073. var form = form;
  1074. if (!form){
  1075. form = this.json.id;
  1076. if (this.json.printForm) form = this.json.printForm;
  1077. }
  1078. window.open("/x_desktop/printWork.html?workid="+this.businessData.work.id+"&app="+this.businessData.work.application+"&form="+form);
  1079. },
  1080. openWindow: function(form, app){
  1081. var application = app || this.businessData.work.application;
  1082. var form = form;
  1083. if (!form){
  1084. form = this.json.id;
  1085. //if (this.json.printForm) form = this.json.printForm;
  1086. }
  1087. window.open("/x_desktop/printWork.html?workid="+this.businessData.work.id+"&app="+this.businessData.work.application+"&form="+form);
  1088. }
  1089. });