product_track.html.erb 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <!-- BEGIN CONTAINER -->
  2. <div class="page-container">
  3. <!-- BEGIN CONTENT -->
  4. <div class="page-content-wrapper">
  5. <!-- BEGIN CONTENT BODY -->
  6. <!-- BEGIN PAGE HEAD-->
  7. <div class="page-head">
  8. <div class="container-fluid">
  9. <!-- BEGIN PAGE TITLE -->
  10. <div class="page-title">
  11. <h1>Seguimiento de productos </h1>
  12. </div>
  13. <!-- END PAGE TITLE -->
  14. </div>
  15. </div>
  16. <!-- END PAGE HEAD-->
  17. <!-- BEGIN PAGE CONTENT BODY -->
  18. <div class="page-content">
  19. <div class="container-fluid">
  20. <!-- BEGIN PAGE BREADCRUMBS -->
  21. <ul class="page-breadcrumb breadcrumb">
  22. <%= render_breadcrumbs :tag => :li, :separator => ' <i class="fa fa-circle"></i> ' %>
  23. </ul>
  24. <!-- END PAGE BREADCRUMBS -->
  25. <div class="search-page search-content-3">
  26. <div class="row">
  27. <div class="col-md-12">
  28. <div class="search-filter bordered">
  29. <!-- <h4 class=" uppercase form-section"> Búsqueda de producto </h4> <hr> -->
  30. <div class="form-group">
  31. <div class="row">
  32. <div class="col-md-6">
  33. <div class="search-label uppercase"> Del </div>
  34. <div class="col-md-6">
  35. <!-- <div class='input-group date' id='begin_date'> -->
  36. <div class="input-group input-medium date date-picker" data-date-format="dd/mm/yyyy">
  37. <input id="start" type='text' class="form-control"/>
  38. <span class="input-group-addon">
  39. <span class="glyphicon glyphicon-calendar"></span>
  40. </span>
  41. </div>
  42. </div>
  43. </div>
  44. <div class="col-md-6">
  45. <div class="search-label uppercase"> Al </div>
  46. <div class="col-md-6">
  47. <!-- <div class='input-group date' id='end_date'> -->
  48. <div class="input-group input-medium date date-picker" data-date-format="dd/mm/yyyy">
  49. <input id="end" type='text' class="form-control"/>
  50. <span class="input-group-addon">
  51. <span class="glyphicon glyphicon-calendar"></span>
  52. </span>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. <div class=" form-group">
  59. <div class="row">
  60. <div class="col-md-6">
  61. <div class="search-label uppercase">Producto <span class="required">*</span></div>
  62. <div class="col-md-12">
  63. <input class="form-control" type="text" id="typeahead">
  64. <%= hidden_field_tag :product_id %>
  65. </div>
  66. </div>
  67. <div class="col-md-6">
  68. <div class="search-label uppercase">Punto de venta</div>
  69. <div class="col-md-12">
  70. <%= select_tag "pointsale", options_from_collection_for_select(Pointsale.vigentes, :id, :name), :include_blank => "Todas", class: "form-control input-medium" %>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. <div class="search-filter-divider bg-grey-steel"></div>
  76. <button class="btn green bold uppercase btn-block" onclick="findSalesByPeriod()">Buscar <i class="m-icon-swapright m-icon-white"></i> </button>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. <!-- BEGIN PAGE CONTENT INNER -->
  82. <div class="page-content-inner">
  83. <div class="row ">
  84. <div class="portlet light">
  85. <div class="portlet-title">
  86. <div class="caption">
  87. <i class="fa fa-location-arrow font-blue-dark"></i>
  88. <span class="caption-subject font-blue-dark bold uppercase">Seguimiento de productos</span>
  89. </div>
  90. </div>
  91. <div class="portlet-body form" id="tracking">
  92. <div class="product_track_search" id='track_detail'>
  93. <%= render "products_track_dtl" %>
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. </div>
  99. <!-- END PAGE CONTENT INNER -->
  100. </div>
  101. </div>
  102. <!-- END PAGE CONTENT BODY -->
  103. <!-- END CONTENT BODY -->
  104. </div>
  105. <!-- END CONTENT -->
  106. </div>
  107. <!-- END CONTAINER -->
  108. <script type="text/javascript">
  109. var rows_selected = [];
  110. var selectedProduct = null;
  111. var timeout = null;
  112. //para no avanzar cuando la cantidad a regresar sea mayor
  113. var shouldProcess = false;
  114. var sale_id = null;
  115. var bloodhound = new Bloodhound({
  116. datumTokenizer: function (d) {
  117. return Bloodhound.tokenizers.whitespace(d.value);
  118. },
  119. queryTokenizer: Bloodhound.tokenizers.whitespace,
  120. remote: {
  121. url: '/find_products?query=%QUERY',
  122. wildcard: '%QUERY'
  123. }
  124. });
  125. bloodhound.initialize();
  126. $('#typeahead').typeahead(
  127. {
  128. minLength: 3
  129. },
  130. {
  131. displayKey: 'name',
  132. source: bloodhound.ttAdapter(),
  133. limit: Infinity,
  134. templates: {
  135. empty: [
  136. '<div class="empty-message">',
  137. 'No se encontró ningun producto. Favor de verificar',
  138. '</div>'
  139. ].join('\n'),
  140. suggestion: Handlebars.compile(
  141. '<div class="media">' +
  142. '<div class="pull-left">' +
  143. '<div class="media-object">' +
  144. '<img src="{{small_img}}" width="50" height="50"/>' +
  145. '</div>' +
  146. '</div>' +
  147. '<div class="media-body">' +
  148. '<h4 class="media-heading"><strong>{{sku}}</strong> | {{name}}</h4>' +
  149. '<p>{{barcode}}</p>' +
  150. '<p>{{description}}</p>' +
  151. '<p>{{display_attributes}}</p>' +
  152. '</div>' +
  153. '</div>')
  154. }
  155. });
  156. $('#typeahead').bind('typeahead:selected', function(event, datum, name) {
  157. selectedProduct = datum;
  158. $('#btn_search_by_period').attr('disabled', false);
  159. });
  160. //buscar ventas por periodo de tiempo
  161. function findSalesByPeriod() {
  162. var product = selectedProduct ? selectedProduct.id : '';
  163. var pointsale = $('#pointsale').val();
  164. // var start = $("#start").val();
  165. // var end = $("#end").val();
  166. var start = moment($("#start").val(), "DD-MM-YYYY").format('YYYY-MM-DD');
  167. var end = moment($("#end").val(), "DD-MM-YYYY").format('YYYY-MM-DD');
  168. $('#product_id').val(product);
  169. if ($("#start").val() && $("#end").val()) {
  170. if (product) {
  171. App.blockUI({
  172. target: $("#track_detail"),
  173. animate: true
  174. });
  175. $.ajax({
  176. type: "get",
  177. url: '/product_track/',
  178. data: {
  179. start_date: start,
  180. end_date: end,
  181. product_id: product,
  182. pointsale_id: pointsale
  183. },
  184. dataType: 'script',
  185. success: function(data) {
  186. App.unblockUI($("#track_detail"));
  187. }
  188. });
  189. } else {
  190. toastr["error"]("Es necesario indicar un producto.");
  191. }
  192. }else{
  193. toastr["error"]("Es necesario indicar fechas.");
  194. }
  195. }
  196. </script>