Built files from Bizgaze WebServer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

w_targetvsachievedashboard.js 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. var Bizgaze;
  2. (function (Bizgaze) {
  3. let Apps;
  4. (function (Apps) {
  5. let TM;
  6. (function (TM) {
  7. let Targets;
  8. (function (Targets) {
  9. let Components;
  10. (function (Components) {
  11. class TargetVSAchieve extends Unibase.Platform.Core.BaseComponent {
  12. cssFiles() {
  13. return ['libs/tabulator-tables/css/bootstrap/tabulator_bootstrap4.min.css'];
  14. }
  15. jsFiles() {
  16. return ['libs/tabulator/js/tabulator.min.js'];
  17. }
  18. html() {
  19. return "<div><button>save</button></div>";
  20. }
  21. loadCustHtml(containerid) {
  22. const html = `<div id="CustomerTargetAchiveWidget" class="mt-40"><div class="card"><div class="card-header border-0 py-1 d-flex align-items-center"><span class="biz-highlight-bg-color text-truncate w-25">Customer Target VS Achive</span>
  23. <div class="card-search-bar target-search-wrap">
  24. <div class="search-wrapper d-flex w-100">
  25. <input class="form-control txt_global_search target-search-input" placeholder="Search Customer" oninput="Bizgaze.Apps.TM.Targets.Components.TargetVSAchieve.Instance().targetTabulatorSearch('${containerid}')">
  26. <i class="fa fa-search search-left-icon"></i>
  27. <div class="biz-highlight-bg-color main-search-loader search-clear-icon d-none"></div>
  28. <a href="javascript:;" class="search-clear-icon target-search-clear biz-highlight-bg-color d-none" onclick="Bizgaze.Apps.TM.Targets.Components.TargetVSAchieve.Instance().clearTargetSearch('${containerid}')"><i class="zmdi zmdi-close"></i></a>
  29. </div>
  30. </div>
  31. </div><div class="card-body pa-0"><div id="Customer_Table" class="target-widget-table templateviewer-tableview"></div></div></div></div>`;
  32. $(".dashboard_targetwidget:first").html(html);
  33. }
  34. loadEmpHtml(containerid) {
  35. const html = `<div id="EmployeeTargetAchiveWidget" class="mt-40"><div class="card"><div class="card-header border-0 py-1 d-flex align-items-center"><span class="biz-highlight-bg-color text-truncate w-25">Employee Target VS Achive</span>
  36. <div class="card-search-bar target-search-wrap">
  37. <div class="search-wrapper d-flex w-100">
  38. <input class="form-control txt_global_search target-search-input" placeholder="Search Employee" oninput="Bizgaze.Apps.TM.Targets.Components.TargetVSAchieve.Instance().targetTabulatorSearch('${containerid}')">
  39. <i class="fa fa-search search-left-icon"></i>
  40. <div class="biz-highlight-bg-color main-search-loader search-clear-icon d-none"></div>
  41. <a href="javascript:;" class="search-clear-icon target-search-clear biz-highlight-bg-color d-none" onclick="Bizgaze.Apps.TM.Targets.Components.TargetVSAchieve.Instance().clearTargetSearch('${containerid}')"><i class="zmdi zmdi-close"></i></a>
  42. </div>
  43. </div>
  44. </div><div class="card-body pa-0"><div id="Employee_Table" class="target-widget-table templateviewer-tableview"></div></div></div></div>`;
  45. $(".dashboard_targetwidget").html(html);
  46. }
  47. loadAutoHtml(containerid) {
  48. const html = `<div class="card-body">
  49. <div class="col-md-3 floating-label-form-group-with-value" id="IncludedTags">
  50. <label for="txt_targetdefinition">Target Definitions</label>
  51. <input type="hidden" class="hf_targetdefinition" value="" />
  52. <select style="width:100%" id="txt_targetdefinition" value="" class="no-border form-control select2_targetdefinition txttargetdefinition" IsTagSelect="false">
  53. <option value="0">Select</option>
  54. </select>
  55. </div>
  56. <div class="dashboard_targetwidget"></div>
  57. </div>`;
  58. $("." + containerid).html(html);
  59. var url = _appsettings.server_url() + '/apis/v4/bizgaze/tm/targets/gettargetdefinitionsautocomplete';
  60. AutoCompleteHelper.getHelper().Create($("#txt_targetdefinition"), ".hf_targetdefinition", url, function (response) {
  61. });
  62. }
  63. load() {
  64. }
  65. init(Containerid) {
  66. Bizgaze.Apps.TM.Targets.Components.TargetVSAchieve.Instance().loadAutoHtml(Containerid);
  67. var instance = this;
  68. $("#txt_targetdefinition").change(function () {
  69. instance.targetDefinitionId = $("#txt_targetdefinition").val();
  70. instance.fileCacheHelper.loadJsFile('apps/tm/targets/managers/targetmanager.js', function () {
  71. Bizgaze.Apps.TM.Targets.Managers.TargetManager.Instance().getTargetDefinitionDetails(instance.targetDefinitionId).then(function (response) {
  72. if (response != null) {
  73. var allowothercontacts = response.result.AllowOtherContacts;
  74. instance.fileCacheHelper.loadCssFile('libs/tabulator-tables/css/bootstrap/tabulator_bootstrap4.min.css', null);
  75. instance.fileCacheHelper.loadJsFiles(["libs/tabulator/js/tabulator.min.js"], function () {
  76. if (allowothercontacts == 1) {
  77. Bizgaze.Apps.TM.Targets.Components.TargetVSAchieve.Instance().loadEmpHtml(Containerid);
  78. instance.employeewisetargetvsachive(instance.targetDefinitionId);
  79. }
  80. else {
  81. Bizgaze.Apps.TM.Targets.Components.TargetVSAchieve.Instance().loadCustHtml(Containerid);
  82. instance.loadCustTabulator("");
  83. instance.customerwisetargetvsachive(instance.targetDefinitionId);
  84. }
  85. });
  86. }
  87. });
  88. });
  89. });
  90. }
  91. customerwisetargetvsachive(targetdefinitionid) {
  92. var userinfo = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  93. var instance = this;
  94. instance.fileCacheHelper.loadJsFile('apps/tm/targets/managers/targetmanager.js', function () {
  95. Bizgaze.Apps.TM.Targets.Managers.TargetManager.Instance().loadCustomerTargetvsAchive(userinfo.sessionId, targetdefinitionid).then(function (response) {
  96. if (response != null) {
  97. var result = response.result;
  98. instance.customerData.setData(result);
  99. }
  100. });
  101. });
  102. }
  103. employeewisetargetvsachive(targetdefinitionid) {
  104. var userinfo = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  105. var instance = this;
  106. instance.fileCacheHelper.loadJsFile('apps/tm/targets/managers/targetmanager.js', function () {
  107. Bizgaze.Apps.TM.Targets.Managers.TargetManager.Instance().loadEmployeeTargetvsAchive(userinfo.sessionId, targetdefinitionid).then(function (response) {
  108. var dataarry = [];
  109. var result = response.result;
  110. instance.employeetotaldata = response.result;
  111. instance.totalEmployeeResponse = jQuery.extend(true, [], response.result);
  112. var datatree = false;
  113. var userparentinformation = response.result.filter(function (o) { return o.EmployeeId === userinfo.userId + "p"; });
  114. if (userparentinformation.length > 0) {
  115. datatree = true;
  116. userparentinformation[0]["_children"] = [];
  117. }
  118. dataarry.push(userparentinformation[0]);
  119. Bizgaze.Apps.TM.Targets.Components.TargetVSAchieve.Instance().loadTabulator(dataarry, datatree, response);
  120. });
  121. });
  122. }
  123. loadTabulator(response, datatree, response1) {
  124. var instance = this;
  125. var autoNumFormatter = function (cell) {
  126. var row = cell.getRow();
  127. var rowIndex = row.getPosition(false);
  128. return (rowIndex + 1);
  129. };
  130. var editIcon = function (cell, formatterParams) {
  131. return "<i class='fa fa-pencil'></i>";
  132. };
  133. instance.initialEmployeeData = response;
  134. instance.employeeData = new Tabulator("#Employee_Table", {
  135. placeholder: "<div class='alert alert-primary text-center mb-0 border-0 w-100 font-14 rounded-0'>No data available</div>",
  136. data: response,
  137. layout: "fitDataFill",
  138. columns: [
  139. { title: "EmployeeId", field: "EmployeeId", visible: false },
  140. { title: "Employee Name", field: "EmployeeName" },
  141. { title: "Target Value", field: "TargetValue" },
  142. {
  143. title: "Achived Value", field: "AchievedTarget", cellClick: function (e, cell) {
  144. instance.currentRow = cell.getRow();
  145. instance.fileCacheHelper.loadJsFile('apps/tm/targets/components/w_tagwisetarget.js', function () {
  146. if (!instance.currentRow._row.data.EmployeeId.includes("p")) {
  147. Bizgaze.Apps.TM.Targets.Components.TagWiseTarget.Instance().loadForm(instance.targetDefinitionId, cell.getRow().getData().EmployeeId, 0, null, 0);
  148. }
  149. });
  150. }, formatter: function (cell) {
  151. instance.currentRow = cell.getRow();
  152. var achive = cell.getValue();
  153. if (!instance.currentRow._row.data.EmployeeId.includes("p")) {
  154. return "<span class='text-primary' font-weight:bold;'>" + achive + "</span>";
  155. }
  156. else {
  157. return achive;
  158. }
  159. }
  160. },
  161. { title: "Percentage", field: "Percentage" },
  162. ],
  163. dataTree: datatree,
  164. dataTreeSelectPropagate: true,
  165. dataTreeChildIndent: 15,
  166. dataTreeRowExpanded: function (row, level) {
  167. var currentemployeeid = row.getData().EmployeeId;
  168. if (currentemployeeid.includes("p"))
  169. currentemployeeid = currentemployeeid.replace("p", "");
  170. var empdatta = instance.employeetotaldata.filter(function (o) { return o.ParentId === Number(currentemployeeid); });
  171. for (var i = 0; i < empdatta.length; i++) {
  172. var userparentinformation = instance.employeetotaldata.filter(function (o) { return o.EmployeeId === empdatta[i].EmployeeId; });
  173. ;
  174. if (userparentinformation[0].EmployeeId.includes("p")) {
  175. if (userparentinformation.length > 0) {
  176. datatree = true;
  177. empdatta[i]["_children"] = [];
  178. }
  179. }
  180. }
  181. row.getData()._children = empdatta;
  182. row.getData().isExpanded = true;
  183. row.update(row.getData());
  184. instance.employeeData.redraw(true);
  185. instance.initialEmployeeData = instance.employeeData.getData();
  186. },
  187. dataTreeRowCollapsed: function (row, level) {
  188. row.getData().isExpanded = false;
  189. },
  190. dataTreeStartExpanded: function (row, level) {
  191. return row.getData().isExpanded;
  192. },
  193. });
  194. }
  195. loadCustTabulator(response) {
  196. var instance = this;
  197. var tabledata = [];
  198. var autoNumFormatter = function (cell) {
  199. var row = cell.getRow();
  200. var rowIndex = row.getPosition(false);
  201. return (rowIndex + 1);
  202. };
  203. var editIcon = function (cell, formatterParams) {
  204. return "<i class='fa fa-pencil'></i>";
  205. };
  206. instance.customerData = new Tabulator("#Customer_Table", {
  207. placeholder: "<div class='alert alert-primary text-center mb-0 border-0 w-100 font-14 rounded-0'>No data available</div>",
  208. data: tabledata,
  209. layout: "fitDataFill",
  210. columns: [
  211. { title: "EmployeeId", field: "EmployeeId", visible: false, },
  212. { title: "Customer Name", field: "EmployeeName" },
  213. { title: "ParentId", field: "ParentId", visible: false },
  214. { title: "Target Value", field: "TargetValue" },
  215. {
  216. title: "Achived Value", field: "AchievedTarget", cellClick: function (e, cell) {
  217. instance.currentRow = cell.getRow();
  218. instance.fileCacheHelper.loadJsFile('apps/tm/targets/components/w_tagwisetarget.js', function () {
  219. Bizgaze.Apps.TM.Targets.Components.TagWiseTarget.Instance().loadForm(instance.targetDefinitionId, cell.getRow().getData().EmployeeId, 0, null, 0);
  220. });
  221. }, formatter: function (cell) {
  222. instance.currentRow = cell.getRow();
  223. var achive = cell.getValue();
  224. return "<span class='text-primary' font-weight:bold;'>" + achive + "</span>";
  225. }
  226. },
  227. { title: "Percentage", field: "Percentage" },
  228. ],
  229. pagination: "local",
  230. paginationSize: 15,
  231. dataTree: false,
  232. dataTreeSelectPropagate: true,
  233. });
  234. }
  235. targetTabulatorSearch(containerId) {
  236. const instance = this;
  237. const containerEl = $(`#${containerId}`);
  238. const searchEl = containerEl.find('.target-search-input');
  239. const loaderEl = containerEl.find('.main-search-loader');
  240. const clearEl = containerEl.find('.target-search-clear');
  241. let tableEl = instance.employeeData;
  242. let totalResponse = instance.totalEmployeeResponse;
  243. let initialTableData = instance.initialEmployeeData;
  244. clearTimeout(instance.searchTimer);
  245. loaderEl.removeClass('d-none');
  246. clearEl.addClass('d-none');
  247. instance.searchTimer = setTimeout(function () {
  248. let searchVal = searchEl.val();
  249. searchVal = searchVal.trim().toLowerCase();
  250. if (searchVal) {
  251. if (containerEl.find('#CustomerTargetAchiveWidget').length > 0) {
  252. instance.customerData.setFilter("EmployeeName", "like", searchVal);
  253. }
  254. else {
  255. const searchedData = totalResponse.filter(employee => {
  256. return employee.EmployeeName.toLowerCase().includes(searchVal) && !employee.EmployeeId.includes('p');
  257. });
  258. tableEl.replaceData(searchedData);
  259. tableEl.redraw(true);
  260. }
  261. clearEl.removeClass('d-none');
  262. }
  263. else {
  264. if (containerEl.find('#CustomerTargetAchiveWidget').length === 0) {
  265. tableEl.replaceData(initialTableData);
  266. tableEl.redraw(true);
  267. }
  268. clearEl.addClass('d-none');
  269. }
  270. loaderEl.addClass('d-none');
  271. }, 1000);
  272. }
  273. clearTargetSearch(containerId) {
  274. const instance = this;
  275. const containerEl = $(`#${containerId}`);
  276. let initialTableData = instance.initialEmployeeData;
  277. containerEl.find('.target-search-input').val('');
  278. containerEl.find('.target-search-clear,.main-search-loader').addClass('d-none');
  279. if (containerEl.find('#CustomerTargetAchiveWidget').length > 0) {
  280. instance.customerData.setFilter("EmployeeName", "like", "");
  281. return;
  282. }
  283. instance.employeeData.replaceData(initialTableData);
  284. instance.employeeData.redraw(true);
  285. }
  286. static Instance() {
  287. if (this.instance === undefined) {
  288. this.instance = new TargetVSAchieve();
  289. }
  290. return this.instance;
  291. }
  292. }
  293. Components.TargetVSAchieve = TargetVSAchieve;
  294. })(Components = Targets.Components || (Targets.Components = {}));
  295. })(Targets = TM.Targets || (TM.Targets = {}));
  296. })(TM = Apps.TM || (Apps.TM = {}));
  297. })(Apps = Bizgaze.Apps || (Bizgaze.Apps = {}));
  298. })(Bizgaze || (Bizgaze = {}));