_form.html.erb 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <%= form_for(@promotion, html: { class: "form-horizontal", id: "promotion_form" }) do |f| %>
  2. <div class="portlet-body form">
  3. <% if @promotion.errors.any? %>
  4. <div class="alert alert-danger">
  5. <strong>Tiene <%= pluralize(@promotion.errors.count, "error") %> no se puede guardar la promoción</strong><br>
  6. <% @promotion.errors.values.each do |message| %>
  7. <%= message.first.to_s %><br>
  8. <!-- $("#error_explanation_move").append($("<li />").html("< %= message.first.to_s %>")); -->
  9. <% end %>
  10. </div>
  11. <% end %>
  12. <div class="form-body">
  13. <div class="alert alert-danger hidden" id="error_explanation_for_promotion"></div>
  14. <div class="row">
  15. <div class="col-md-12">
  16. <!-- fechas -->
  17. <div class="form-group">
  18. <%= label_tag :begin_date, "Fecha", { class: "col-md-1 control-label" } do %> Del
  19. <span class="required">*</span>
  20. <% end %>
  21. <div class="col-sm-2">
  22. <div class='input-group date' id='begin_date'>
  23. <!-- <input id="start" type='text' class="form-control"/> -->
  24. <%= f.text_field :start_date, { id: 'start', class: 'form-control' } %>
  25. <span class="input-group-addon">
  26. <span class="glyphicon glyphicon-calendar"></span>
  27. </span>
  28. <!-- < %= f.hidden_field :start_date, {id: 'start_date_input'} %> -->
  29. </div>
  30. </div>
  31. <%= label_tag :end_date, "Fecha", { class: "col-md-1 control-label" } do %> Al
  32. <span class="required">*</span>
  33. <% end %>
  34. <div class="col-sm-2">
  35. <div class='input-group date' id='end_date'>
  36. <!-- <input id="end" type='text' class="form-control"/> -->
  37. <%= f.text_field :end_date, { id: 'end', class: 'form-control' } %>
  38. <span class="input-group-addon">
  39. <span class="glyphicon glyphicon-calendar"></span>
  40. </span>
  41. <!-- < %= f.hidden_field :end_date, {id: 'end_date_input'} %> -->
  42. </div>
  43. </div>
  44. </div>
  45. <!-- filtro -->
  46. <div class="form-group">
  47. <div class="col-md-8" style="padding-top:5px">
  48. <div class="radio-list">
  49. <label class="radio-inline" style="margin-left:10px">
  50. <input type="radio" name="filter" id="category" value="category">Todos los productos de una línea
  51. </label>
  52. <label class="radio-inline" style="margin-left:37px">
  53. <input type="radio" name="filter" id="products" value="products" checked>Producto específico
  54. </label>
  55. </div>
  56. </div>
  57. </div>
  58. <div class="form-group">
  59. <%= f.label :percent, "", { class: "col-md-2 control-label" } do %> Porcentaje de descuento <span class="required">*</span> <% end %>
  60. <div class="col-md-1">
  61. <div class="input-group">
  62. <%= f.text_field :percent, { class: "form-control mask_decimal input-xsmall", value: 1 } %>
  63. <span class="input-group-addon"> % </span>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="form-group" id="variants_div">
  68. <%= label_tag :variants, "", { class: "col-md-3 control-label" } do %> ¿Buscar por variantes? <span class="required">*</span> <% end %>
  69. <div class="col-md-3">
  70. <%= check_box_tag(:include_variants, true, true, {
  71. class: "make-switch",
  72. data: {
  73. on_color: "success",
  74. off_color: "danger",
  75. on_text: "Si",
  76. off_text: "No"
  77. }
  78. }) %>
  79. </div>
  80. </div>
  81. <div class="form-group">
  82. <div class="well col-md-6">
  83. <!-- linea -->
  84. <div class="form-group hidden" id="category_div">
  85. <%= f.label :category_id, "", { class: "col-md-3 control-label" } do %> Línea de productos
  86. <span class="required">*</span>
  87. <% end %>
  88. <div class="col-md-8 select2-bootstrap-prepend">
  89. <%= f.collection_select(:category_id, Category.activos_padre, :id, :category, {}, class: "form-control select2") %>
  90. <span class="help-block">Se agregarán todos los productos de la línea a la tabla.</span>
  91. </div>
  92. </div>
  93. <div class="form-group hidden" id="subcategory_div">
  94. <%= f.label :subcategory_id, "Sublínea", { class: "col-md-3 col-sm-3 control-label" } %>
  95. <div class="col-md-8 select2-bootstrap-prepend col-sm-4">
  96. <%= f.collection_select(:subcategory_id, {}, :id, :category, {}, class: "form-control select2") %>
  97. </div>
  98. </div>
  99. <!-- producto -->
  100. <div class="form-group" id="products_div">
  101. <label class="control-label col-md-3" for="typeahead"> Producto
  102. <span class="required">*</span>
  103. </label>
  104. <div class="input-groupll col-md-8">
  105. <input class="form-control" type="text" id="typeahead" data-option-url="/find_products/%QUERY/VAR">
  106. <span class="help-block">Se puede buscar por No. de parte o Nombre de producto </span>
  107. <%= f.hidden_field :product_id, { id: 'product_input' } %>
  108. <br>
  109. <span id="product_name"><% if @promotion.product.present? %><i>Producto seleccionado: <%= @promotion.product.display_sku_name_attributes %></i><% end %></span>
  110. </div>
  111. </div>
  112. </div>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. <!-- acciones del form -->
  118. <div class="form-actions">
  119. <div class="row">
  120. <div class="col-md-9">
  121. <!-- < %= f.submit 'Guardar', { class: "btn green" } %> -->
  122. <button type="button" class="btn green" onclick="addPromotion()" id="submit_promotion">Guardar</button>
  123. <%= link_to 'Cancelar', promotions_path, { class: "btn default" } %>
  124. </div>
  125. </div>
  126. </div>
  127. </div>
  128. <% end %>
  129. <script type="text/javascript">
  130. var selectedProduct;
  131. // inicialmente dejar en blanco los selects
  132. $(document).on("page:change", function() {
  133. <% unless @filter.present? && @filter == "category" %>
  134. $("#promotion_category_id").select2("val", "");
  135. $("#promotion_subcategory_id").select2("val", "");
  136. <% end %>
  137. });
  138. $('input[name="include_variants"]').on('switchChange.bootstrapSwitch', function(event, state) {
  139. $(this).val(state);
  140. });
  141. $('#begin_date').datetimepicker({
  142. icons: {
  143. date: "fa fa-calendar"
  144. },
  145. format: "DD/MM/YYYY"
  146. });
  147. $('#end_date').datetimepicker({
  148. icons: {
  149. date: "fa fa-calendar"
  150. },
  151. format: "DD/MM/YYYY"
  152. });
  153. var bloodhound = new Bloodhound({
  154. datumTokenizer: function (d) {
  155. return Bloodhound.tokenizers.whitespace(d.value);
  156. },
  157. queryTokenizer: Bloodhound.tokenizers.whitespace,
  158. remote: {
  159. url: $('#typeahead').data('option-url'),
  160. wildcard: '%QUERY',
  161. replace: function(url, uriEncodedQuery) {
  162. variants = $("#include_variants").val();
  163. return url.replace('VAR', variants).replace('%QUERY', uriEncodedQuery)
  164. }
  165. }
  166. });
  167. bloodhound.initialize();
  168. $('#typeahead').typeahead(
  169. {
  170. minLength: 3
  171. },
  172. {
  173. displayKey: 'name',
  174. source: bloodhound.ttAdapter(),
  175. limit: Infinity,
  176. templates: {
  177. empty: [
  178. '<div class="empty-message">',
  179. 'No se encontró ningún producto. Favor de verificar',
  180. '</div>'
  181. ].join('\n'),
  182. suggestion: function(data) {
  183. return '<div class="media">' +
  184. '<div class="pull-left">' +
  185. '<div class="media-object">' +
  186. '<img src="'+ data.small_img +'" width="50" height="50"/>' +
  187. '</div>' +
  188. '</div>' +
  189. '<div class="media-body">' +
  190. '<h4 class="media-heading"><strong>'+ data.sku +'</strong> | '+ data.name +'</h4>' +
  191. '<p>'+ data.barcode +'</p>' +
  192. '<p>'+ data.description +'</p>' +
  193. '<p>'+ data.display_attributes +'</p>' +
  194. '</div>' +
  195. '</div>'
  196. }
  197. }
  198. }
  199. );
  200. // this is the event that is fired when a user clicks on a suggestion
  201. $('#typeahead').bind('typeahead:selected', function(event, datum, name) {
  202. console.log(selectedProduct)
  203. selectedProduct = datum;
  204. $('#product_input').val(selectedProduct.id);
  205. $("#product_name").html("<i>Producto seleccionado: "+selectedProduct.display_sku_name_attributes+"</i>")
  206. });
  207. $('input[type=radio][name=filter]').change(function() {
  208. switch(this.value) {
  209. case 'category':
  210. $('#category_div').removeClass('hidden');
  211. $("#subcategory_div").removeClass("hidden");
  212. $('#products_div').addClass('hidden');
  213. $("#variants_div").addClass('hidden');
  214. $('#product_input').val('');
  215. break;
  216. case 'products':
  217. $('#category_div').addClass('hidden');
  218. $("#subcategory_div").addClass("hidden");
  219. $('#products_div').removeClass('hidden');
  220. $("#variants_div").removeClass('hidden');
  221. $("#promotion_category_id").select2("val", "");
  222. break;
  223. }
  224. $('.select2').select2();
  225. });
  226. $('#promotion_category_id').on('change', function() {
  227. if($(this).val()) {
  228. $.ajax({
  229. type: "get",
  230. url: '/getcategories/' + $(this).val(),
  231. dataType: 'json',
  232. success: function(data) {
  233. $('#promotion_subcategory_id').empty();
  234. if(data.length > 0) {
  235. $('#promotion_subcategory_id').attr('disabled', false);
  236. $('#promotion_subcategory_id').append("<option selected value='0'>Seleccione</option>")
  237. } else {
  238. $('#promotion_subcategory_id').attr('disabled', true);
  239. }
  240. for(i in data){
  241. $('#promotion_subcategory_id').append("<option value='" + data[i].id +"'>" + data[i].category + "</option>")
  242. }
  243. }
  244. });
  245. }
  246. });
  247. function addPromotion() {
  248. $('#promotion_form').submit();
  249. }
  250. </script>