650ccfe3731001983a4fd341c5655c660ebd11ec.svn-base 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. BemsWebApplication.BudgetPlan = function (params, viewInfo) {
  2. 'use strict';
  3. var budgetPlanDataGridOptions,
  4. modifiableBudgetPlanDataGridOptions = undefined
  5. ;
  6. var budgets = ko.observableArray(),
  7. budgetsInView = ko.observableArray()
  8. ;
  9. var budgetGridView = undefined;
  10. var budgetCodeDataSource = BWA.DataUtil.createDataSource({
  11. dataSourceOptions: {
  12. paginate: false,
  13. store: BemsWebApplication.odata.FmsBudgetCodeClassEx,
  14. select: [
  15. 'FirstBudgetClassId',
  16. 'SecondBudgetClassId',
  17. 'ThirdBudgetClassId',
  18. 'FirstBudgetName',
  19. 'SecondBudgetName',
  20. 'ThirdBudgetName',
  21. 'YearlyBudget',
  22. 'MonthlyBudget',
  23. 'FirstBudgetNameWithSum',
  24. 'SecondBudgetNameWithSum',
  25. ],
  26. },
  27. });
  28. modifiableBudgetPlanDataGridOptions = utils.datagrid.defaultOptions({
  29. //pager: {
  30. // showPageSizeSelector: false,
  31. // allowedPageSizes: []
  32. //},
  33. //pager: {
  34. // allowedPageSizes: false,
  35. //},
  36. //paging: {
  37. // enabled: false
  38. //},
  39. dataSource: budgetsInView,
  40. columns: [
  41. { dataField: 'FirstBudgetNameWithSum', caption: '대분류' , width: '1%', alignment: 'center', groupIndex: 0 },
  42. { dataField: 'SecondBudgetNameWithSum', caption: '중분류', width: '1%', alignment: 'center', groupIndex: 1 },
  43. { dataField: 'ThirdBudgetName', caption: '소분류', width: '50%', alignment: 'center', allowEditing: false },
  44. {
  45. dataField: 'YearlyBudget', caption: '연간예산', alignment: 'center'
  46. , cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({
  47. min: 0,
  48. max: Number.MAX_SAFE_INTEGER,
  49. //max: 100000000,
  50. dataField: 'YearlyBudget'
  51. , convertValueWhenValueChanged: function (data, value) {
  52. var monthlyValue = value / 12;
  53. data.MonthlyBudget(monthlyValue);
  54. reCalculateSummaryValue();
  55. return Math.max(0, value);
  56. }
  57. })
  58. },
  59. {
  60. dataField: 'MonthlyBudget', caption: '월간예산', alignment: 'center'
  61. , cellTemplate: utils.datagrid.getNumberBoxDataGridTemplateFunc({
  62. min: 0,
  63. max: Number.MAX_SAFE_INTEGER,
  64. //max: 100000000,
  65. dataField: 'MonthlyBudget'
  66. , convertValueWhenValueChanged: function (data, value) {
  67. var yearlyValue = value * 12;
  68. data.YearlyBudget(yearlyValue);
  69. reCalculateSummaryValue();
  70. return Math.max(0, value);
  71. }
  72. })
  73. },
  74. ],
  75. cellClick: function (e) {
  76. if(e.column.dataField === 'YearlyBudget' || e.column.dataField === 'MonthlyBudget' ){
  77. utils.datagrid.cellClickEventForDataGridTemplate(e, e.column.dataField);
  78. }
  79. },
  80. contentReadyAction: function (e) {
  81. budgetGridView = e.component;
  82. },
  83. });
  84. var dataSourceOptions = {
  85. select: [
  86. 'SiteId',
  87. 'Year',
  88. ],
  89. expand: [
  90. 'FmsBudgetDetail',
  91. 'FmsBudgetDetail/FmsBudgetCodeClass', // FirstBudgetClass
  92. 'FmsBudgetDetail/FmsBudgetCodeClass1', // SecondBudgetClass
  93. 'FmsBudgetDetail/FmsBudgetCodeClass2', // ThridBudgetClass
  94. ],
  95. extendOptions: {
  96. forceOriginalField: true
  97. },
  98. filter: [
  99. ['SiteId', '=', BWA.UserInfo.SiteId()]
  100. ]
  101. };
  102. var viewModel = BWA.DataGrid.createViewWithDataGrid(params, viewInfo, 'FmsBudget', {
  103. dataSourceOptions: dataSourceOptions,
  104. columns: [
  105. { dataField: 'Year', caption: $G('year'), width: '100%', alignment: 'center', allowFiltering: false, sortOrder: 'desc' },
  106. ],
  107. //searchViewItems: [{ id: 'Name' }],
  108. handleViewShowing: function (dataModel) {
  109. $.when(
  110. budgetCodeDataSource.load()
  111. ).done(function (budgetCodeResult) {
  112. budgetsInView(budgetCodeResult);
  113. });
  114. viewModel.popupOptions.position = { offset: '0, -200' };
  115. },
  116. handlePopupShowing: function (isNewInPopup, dataViewModel) {
  117. //if (isNewInPopup()) { // 신규등록인 경우
  118. // // UI 에는별도로 표시하지 않음
  119. // dataViewModel.PartnerTypeId(1);
  120. //}
  121. },
  122. });
  123. function reCalculateSummaryValue() {
  124. // budgetsInView
  125. var firstCodeList = _.keys(_.countBy(budgetsInView(), function (data) { return data.FirstBudgetClassId(); }));
  126. var secondCodeList = _.keys(_.countBy(budgetsInView(), function (data) { return data.SecondBudgetClassId(); }));
  127. //var firstCodeData = [];
  128. //var secondCodeData = [];
  129. var firstCodeYearlySumValue = 0;
  130. var firstCodeMonthlySumValue = 0;
  131. var secondCodeYearlySumValue = 0;
  132. var secondCodeMonthlySumValue = 0;
  133. // 1차 코드에 대한 계산
  134. _.each(firstCodeList, function (x) {
  135. _.each(budgetsInView(), function (b) {
  136. if (x == b.FirstBudgetClassId()) {
  137. firstCodeYearlySumValue += b.YearlyBudget();
  138. firstCodeMonthlySumValue += b.MonthlyBudget();
  139. }
  140. });
  141. //firstCodeData.push({
  142. // FirstBudgetClassId: x,
  143. // YearlyBudgetSum: firstCodeYearlySumValue,
  144. // MonthlyBudgetSum: firstCodeMonthlySumValue
  145. //});
  146. _.each(budgetsInView(), function (b) {
  147. if (x == b.FirstBudgetClassId()) {
  148. b.FirstBudgetNameWithSum(b.FirstBudgetName() + '( 년간: \\' + firstCodeYearlySumValue + ') / (월간: \\' + firstCodeMonthlySumValue + ') ');
  149. }
  150. });
  151. firstCodeYearlySumValue = 0;
  152. firstCodeMonthlySumValue = 0;
  153. });
  154. // 2차 코드에 대한 계산
  155. _.each(secondCodeList, function (x) {
  156. _.each(budgetsInView(), function (b) {
  157. if (x == b.SecondBudgetClassId()) {
  158. secondCodeYearlySumValue += b.YearlyBudget();
  159. secondCodeMonthlySumValue += b.MonthlyBudget();
  160. }
  161. });
  162. _.each(budgetsInView(), function (b) {
  163. if (x == b.SecondBudgetClassId()) {
  164. b.SecondBudgetNameWithSum(b.SecondBudgetName() + '(년간: \\' + secondCodeYearlySumValue + ') / (월간: \\' + secondCodeMonthlySumValue + ') ');
  165. }
  166. });
  167. secondCodeYearlySumValue = 0;
  168. secondCodeMonthlySumValue = 0;
  169. });
  170. budgetGridView.refresh();
  171. }
  172. // viewModel.budgetPlanDataGridOptions = budgetPlanDataGridOptions;
  173. viewModel.modifiableBudgetPlanDataGridOptions = modifiableBudgetPlanDataGridOptions;
  174. return viewModel;
  175. };