distribute.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /* Update other picker on change */
  2. $.zui.Picker.DEFAULTS.onChange = function(event)
  3. {
  4. var picker = event.picker;
  5. if(!picker.$formItem.is('[name^=product]')) return;
  6. resfreshPicker('product');
  7. }
  8. $(function()
  9. {
  10. resfreshPicker('product', true);
  11. $('#dataform .table-form').find('tr:first').find('a:last-child').text('').css('pointer-events', 'none');
  12. $('#dataform .table-form').find('tr:not(:first):not(:nth-last-child(2))').find('th').text('');
  13. })
  14. /**
  15. * Load roadmap.
  16. *
  17. * @param productID $productID
  18. * @param branch $branch
  19. * @access public
  20. * @return void
  21. */
  22. function loadRoadmap(productID, branch, index = 0)
  23. {
  24. var link = createLink('demand', 'ajaxGetRoadmaps', 'productID=' + productID + '&branch=' + branch + '&param=distributable&index=' + index);
  25. $.post(link, function(html)
  26. {
  27. $('#roadmap' + index).replaceWith(html);
  28. $('#roadmap' + index).parents('.roadmapBox').find('.picker').remove();
  29. $('#roadmap' + index).picker();
  30. var optionCount = $(html).find('option').length;
  31. if(optionCount < 2 && productID != 0)
  32. {
  33. $('.newRoadmap' + index).removeClass('hidden');
  34. }
  35. else
  36. {
  37. $('.newRoadmap' + index).addClass('hidden');
  38. }
  39. });
  40. }
  41. /**
  42. * Load branches when change product.
  43. *
  44. * @param int $productID
  45. * @access public
  46. * @return void
  47. */
  48. function loadProductBranches(productID, index = 0)
  49. {
  50. var branchId = '#branch' + index;
  51. var branchPickerId = '#pk_branch' + index + '-search';
  52. var $product = $('#product' + index);
  53. $(branchId).remove();
  54. $(branchPickerId).closest('.picker').remove();
  55. $.get(createLink('demand', 'ajaxGetBranches', "productID=" + productID + "&oldBranch=0&index=" + index + "&multiple=multiple"), function(data)
  56. {
  57. var $inputGroup = $product.closest('.input-group');
  58. if(data && $product.val() != 0)
  59. {
  60. $inputGroup.append(data);
  61. $(branchId).picker();
  62. }
  63. $inputGroup.fixInputGroup();
  64. var branch = $(branchId).val();
  65. if(branch === undefined) branch = '';
  66. if(branch !== '')
  67. {
  68. $product.closest('.input-group').addClass('productDiv');
  69. $product.closest('.input-group').find('.input-group-addon').hide();
  70. $product.closest('.input-group').find('.picker:first').css('width', '70%');
  71. $product.closest('.input-group').find('.picker:last').css('width', '30%');
  72. $product.closest('.input-group').find('.picker').css('float', 'left');
  73. }
  74. else
  75. {
  76. $product.closest('.input-group').removeClass('productDiv');
  77. $product.closest('.input-group').find('.input-group-addon').show();
  78. $product.closest('.input-group').find('.picker:first').css('width', '100%');
  79. $product.closest('.input-group').find('.picker:last').css('width', '100%');
  80. $product.closest('.input-group').find('.picker').css('float', 'none');
  81. }
  82. loadRoadmap(productID, branch, index);
  83. })
  84. }
  85. /**
  86. * Load branch.
  87. *
  88. * @param obj $obj
  89. * @access public
  90. * @return void
  91. */
  92. function loadBranch(obj, index)
  93. {
  94. var productID = $('#product' + index).val();
  95. var branch = $('#branch' + index).val();
  96. loadRoadmap(productID, branch, index);
  97. }
  98. /**
  99. * Add new product.
  100. *
  101. * @param obj $obj
  102. * @access public
  103. * @return void
  104. */
  105. function addNewProduct(obj)
  106. {
  107. if($(obj).attr('checked'))
  108. {
  109. /* Hide product and plan dropdown controls. */
  110. $('.productsBox .select').addClass('hidden');
  111. $('.productsBox .select').find('select').attr('disabled', true).trigger("chosen:updated");
  112. /* Displays the input box for creating a product. */
  113. $("[name^='newProduct']").prop('checked', true);
  114. $('#productName').removeAttr('disabled', true);
  115. $('.productsBox .addProduct').removeClass('hidden');
  116. }
  117. else
  118. {
  119. /* Show product and product dropdown controls. */
  120. $('.productsBox .select').removeClass('hidden');
  121. $('.productsBox .select').find('select').removeAttr('disabled').trigger("chosen:updated");
  122. /* Hide the input box for creating a product. */
  123. $("[name^='newProduct']").prop('checked', false);
  124. $('#productName').attr('disabled', true);
  125. $('.productsBox .addProduct').addClass('hidden');
  126. }
  127. }
  128. /**
  129. * Add new roadmap.
  130. *
  131. * @param obj $obj
  132. * @access public
  133. * @return void
  134. */
  135. function addNewRoadmap(obj, index)
  136. {
  137. console.log(index);
  138. if($(obj).attr('checked'))
  139. {
  140. $(obj).closest('#roadmapBox').find('.select').addClass('hidden');
  141. $(obj).closest('#roadmapBox').find('.select').attr('disabled', true).trigger("chosen:updated");
  142. $(obj).closest('#roadmapBox').find("[name^='newRoadmap']").prop('checked', true);
  143. $('#roadmapName' + index).removeAttr('disabled', true);
  144. $(obj).closest('#roadmapBox').find('.addRoadmap').removeClass('hidden');
  145. }
  146. else
  147. {
  148. $(obj).closest('#roadmapBox').find('.select').removeClass('hidden');
  149. $(obj).closest('#roadmapBox').find('.select').removeAttr('disabled').trigger("chosen:updated");
  150. $(obj).closest('#roadmapBox').find("[name^='newRoadmap']").prop('checked', false);
  151. $('#roadmapName' + index).attr('disabled', true);
  152. $(obj).closest('#roadmapBox').find('.addRoadmap').addClass('hidden');
  153. }
  154. }
  155. /**
  156. * Delete item.
  157. *
  158. * @param object $obj
  159. * @access public
  160. * @return void
  161. */
  162. function deleteItem(obj)
  163. {
  164. $(obj).closest('tr').find('.picker .picker-selection-remove').click();
  165. $(obj).closest('tr').remove();
  166. resfreshPicker('product');
  167. }
  168. let addItemindex = $('#dataform tbody').find('.productsBox').length;
  169. /**
  170. * Add item.
  171. *
  172. * @param object $obj
  173. * @access public
  174. * @return void
  175. */
  176. function addItem(obj)
  177. {
  178. addItemindex++;
  179. var index = addItemindex;
  180. var itemRow = $('#itemRow').html().replace(/itemIndex/g, index);;
  181. $(obj).closest('tr').after('<tr class="addedItem">' + itemRow + '</tr>');
  182. var newItem = $('#product' + index).closest('tr');
  183. var $product = $("#product" + index).picker();
  184. $("#roadmap" + index).picker();
  185. resfreshPicker('product');
  186. }
  187. function resfreshPicker(name = '', resferBranch = false)
  188. {
  189. var disabledItems = [];
  190. $('#dataform select[name^=' + name + ']').each(function()
  191. {
  192. var $select = $(this);
  193. $select.picker({dropWidth: '100%'});
  194. var picker = $select.data('zui.picker');
  195. if(!picker) return;
  196. if(prckerList.length == 0) prckerList = picker.list;
  197. var value = picker.getValue();
  198. var selectItem = picker.getListItem(value);
  199. if(selectItem) disabledItems.push($.extend({}, selectItem, {disabled: true}));
  200. });
  201. $.each(prckerList, function(index, value) {value.disabled = '';});
  202. $('#dataform select[name^=' + name + ']').each(function()
  203. {
  204. var $select = $(this);
  205. var picker = $select.data('zui.picker');
  206. var value = picker.getValue();
  207. var index = $select.attr('data-index');
  208. $select.picker({list: prckerList});
  209. if(disabledItems.length) $(this).data('zui.picker').updateOptionList(disabledItems);
  210. if(resferBranch) loadProductBranches(value, index);
  211. });
  212. if(prckerList.length - 1 == disabledItems.length)
  213. {
  214. $('#dataform .addItem').addClass('hidden');
  215. }
  216. else
  217. {
  218. $('#dataform .addItem').removeClass('hidden');
  219. }
  220. }