product_track.html.erb 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. <div class="page-content-inner">
  25. <div class="row ">
  26. <div class="portlet light">
  27. <div class="portlet-title">
  28. <div class="caption">
  29. <i class="fa fa-location-arrow font-blue-dark"></i>
  30. <span class="caption-subject font-blue-dark bold uppercase">Seguimiento de productos</span>
  31. </div>
  32. </div>
  33. <div class="portlet-body form" id="tracking">
  34. <div class="form-horizontal">
  35. <div class="row">
  36. <div class="form-group">
  37. <div class="col-md-6 col-sm-12">
  38. <%= label_tag :begin_date, "Fecha", { class: "col-md-2 col-sm-1 control-label" } do %> Desde <% end %>
  39. <div class="col-sm-2 col-md-4" style="padding-left:0px;padding-right:0px;">
  40. <div class='input-group date' id='begin_date'>
  41. <input id="start" type='text' class="form-control" value="<%= l(Date.today.beginning_of_month, format: '%d/%m/%Y') %>" />
  42. <span class="input-group-addon">
  43. <span class="glyphicon glyphicon-calendar"></span>
  44. </span>
  45. </div>
  46. </div>
  47. <%= label_tag :end_date, "Fecha", { class: "col-md-2 col-sm-1 control-label" } do %> Hasta <% end %>
  48. <div class="col-sm-2 col-md-4" style="padding-left:0px;padding-right:0px;">
  49. <div class='input-group date' id='end_date'>
  50. <input id="end" type='text' class="form-control" value="<%= l(Date.today.end_of_month, format: '%d/%m/%Y') %>" />
  51. <span class="input-group-addon">
  52. <span class="glyphicon glyphicon-calendar"></span>
  53. </span>
  54. </div>
  55. </div>
  56. </div>
  57. </div><!-- -->
  58. <div class="form-group">
  59. <div class="col-md-5 col-sm-5">
  60. <label class="col-md-3 col-sm-3 control-label" for="typeahead"> Producto <span class="required">*</span> </label>
  61. <div class="col-md-9 col-sm-9">
  62. <input class="form-control" type="text" id="typeahead">
  63. </div>
  64. </div>
  65. <div class="col-md-6 col-sm-6">
  66. <%= label_tag :pointsale, "Punto de venta", class: "control-label col-md-3 col-sm-3" %>
  67. <div class="col-md-6 col-sm-7">
  68. <%= select_tag "pointsale", options_from_collection_for_select(Pointsale.vigentes, :id, :name), include_blank: "Todos", class: "form-control input-medium" %>
  69. </div>
  70. <button class="btn btn-icon-only blue" onclick="findSalesByPeriod()">
  71. <i class="fa fa-search"></i>
  72. </button>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. <div class="product_track_search">
  78. <div class="row">
  79. <div class="col-md-12">
  80. <div class="tabbable-custom">
  81. <ul class="nav nav-tabs">
  82. <li class="active">
  83. <a href="#sales_tab" data-toggle="tab" aria-expanded="false">Ventas</a>
  84. </li>
  85. <li>
  86. <a href="#purchases_tab" data-toggle="tab" aria-expanded="false">Compras</a>
  87. </li>
  88. </ul>
  89. <div class="tab-content">
  90. <div class="tab-pane active" id="sales_tab">
  91. <div class="product_track_search" id='track_detail'>
  92. <!-- < %= render "products_track_dtl" %> -->
  93. </div>
  94. </div>
  95. <div class="tab-pane" id="purchases_tab">
  96. <div class="product_track_purchases_search" id='track_detail_purchases'>
  97. <!-- < %= render "products_track_purchases_dtl" %> -->
  98. </div>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. <!-- END PAGE CONTENT INNER -->
  110. </div>
  111. </div>
  112. <!-- END PAGE CONTENT BODY -->
  113. <!-- END CONTENT BODY -->
  114. </div>
  115. <!-- END CONTENT -->
  116. </div>
  117. <!-- END CONTAINER -->
  118. <script type="text/javascript">
  119. $(document).on("page:change", function() {
  120. App.init();
  121. $('#start').datetimepicker({
  122. icons: {
  123. date: "fa fa-calendar"
  124. },
  125. format: "DD/MM/YYYY"
  126. });
  127. $('#end').datetimepicker({
  128. icons: {
  129. date: "fa fa-calendar"
  130. },
  131. format: "DD/MM/YYYY"
  132. });
  133. });
  134. var rows_selected = [];
  135. var selectedProduct = null;
  136. var timeout = null;
  137. //para no avanzar cuando la cantidad a regresar sea mayor
  138. var shouldProcess = false;
  139. var sale_id = null;
  140. var bloodhound = new Bloodhound({
  141. datumTokenizer: function (d) {
  142. return Bloodhound.tokenizers.whitespace(d.value);
  143. },
  144. queryTokenizer: Bloodhound.tokenizers.whitespace,
  145. remote: {
  146. url: '/find_products?query=%QUERY',
  147. wildcard: '%QUERY'
  148. }
  149. });
  150. bloodhound.initialize();
  151. $('#typeahead').typeahead(
  152. {
  153. minLength: 3
  154. },
  155. {
  156. displayKey: 'name',
  157. source: bloodhound.ttAdapter(),
  158. limit: Infinity,
  159. templates: {
  160. empty: [
  161. '<div class="empty-message">',
  162. 'No se encontró ningun producto. Favor de verificar',
  163. '</div>'
  164. ].join('\n'),
  165. suggestion: Handlebars.compile(
  166. '<div class="media">' +
  167. '<div class="pull-left">' +
  168. '<div class="media-object">' +
  169. '<img src="{{small_img}}" width="50" height="50"/>' +
  170. '</div>' +
  171. '</div>' +
  172. '<div class="media-body">' +
  173. '<h4 class="media-heading"><strong>{{sku}}</strong> | {{name}}</h4>' +
  174. '<p>{{barcode}}</p>' +
  175. '<p>{{description}}</p>' +
  176. '<p>{{display_attributes}}</p>' +
  177. '</div>' +
  178. '</div>')
  179. }
  180. });
  181. $('#typeahead').bind('typeahead:selected', function(event, datum, name) {
  182. selectedProduct = datum;
  183. $('#btn_search_by_period').attr('disabled', false);
  184. });
  185. //buscar ventas por periodo de tiempo
  186. function findSalesByPeriod() {
  187. var product = selectedProduct ? selectedProduct.id : '';
  188. var pointsale = $('#pointsale').val();
  189. var start = moment($("#start").data("date"), "DD-MM-YYYY").startOf('day').format('YYYY-MM-DD HH:mm:ss');
  190. var end = moment($("#end").data("date"), "DD-MM-YYYY").add(23, 'hours').add(59, 'minutes').add(59, 'seconds').format('YYYY-MM-DD HH:mm:ss');
  191. $('#product_id').val(product);
  192. if ($("#start").val() && $("#end").val()) {
  193. if (product) {
  194. $.ajax({
  195. type: "get",
  196. url: '/product_track/',
  197. data: {
  198. start_date: start,
  199. end_date: end,
  200. product_id: product,
  201. pointsale_id: pointsale
  202. },
  203. dataType: 'script',
  204. success: function(data) {
  205. App.unblockUI($("#track_detail"));
  206. App.unblockUI($("#track_detail_purchases"));
  207. }
  208. });
  209. } else {
  210. toastr["error"]("Es necesario indicar un producto.");
  211. }
  212. } else {
  213. toastr["error"]("Es necesario indicar fechas.");
  214. }
  215. }
  216. </script>