index.html.erb 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <div class="page-container">
  2. <!-- BEGIN CONTENT -->
  3. <div class="page-content-wrapper">
  4. <!-- BEGIN CONTENT BODY -->
  5. <!-- BEGIN PAGE HEAD-->
  6. <div class="page-head">
  7. <div class="container-fluid">
  8. <!-- BEGIN PAGE TITLE -->
  9. <div class="page-title">
  10. <h1>Ventas </h1>
  11. </div>
  12. <!-- END PAGE TITLE -->
  13. </div>
  14. </div>
  15. <!-- END PAGE HEAD-->
  16. <!-- BEGIN PAGE CONTENT BODY -->
  17. <div class="page-content">
  18. <div class="container-fluid">
  19. <!-- BEGIN PAGE BREADCRUMBS -->
  20. <ul class="page-breadcrumb breadcrumb">
  21. <%= render_breadcrumbs :tag => :li, :separator => ' <i class="fa fa-circle"></i> ' %>
  22. </ul>
  23. <!-- END PAGE BREADCRUMBS -->
  24. <!-- BEGIN PAGE CONTENT INNER -->
  25. <div class="page-content-inner">
  26. <div id="notice">
  27. <% if success %>
  28. <div class="alert alert-success">
  29. <p><%= success %></p>
  30. </div>
  31. <% elsif warning %>
  32. <div class="alert alert-warning">
  33. <p><%= warning %></p>
  34. </div>
  35. <% end %>
  36. </div>
  37. <div class="row">
  38. <div class="col-md-12">
  39. <div class="portlet light ">
  40. <div class="portlet-title">
  41. <div class="caption">
  42. <i class="fa fa-list "></i>
  43. <span class="caption-subject bold uppercase">Lista de ventas</span>
  44. </div>
  45. <div class="actions">
  46. <% if can? :create, Sale %>
  47. <%= link_to new_sale_path, { class: "btn bold green pull-right filtros" } do %> Nueva Venta <i class="fa fa-plus"></i>
  48. <% end %>
  49. <% end %>
  50. </div>
  51. </div>
  52. <div class="portlet-body">
  53. <div class="form-horizontal" style="margin-bottom:35px">
  54. <div class="row">
  55. <div class="col-md-11">
  56. <%= hidden_field_tag 'title_for_print' %>
  57. <div class="form-group">
  58. <%= label_tag :begin_date, "Fecha", { class: "col-md-1 control-label" } do %> Desde <% end %>
  59. <div class="col-sm-2" style="padding-left:0px;padding-right:0px;">
  60. <div class='input-group date' id='begin_date'>
  61. <input id="start" type='text' class="form-control" value="<%= l(Date.today.beginning_of_month, format: '%d/%m/%Y') %>" />
  62. <span class="input-group-addon">
  63. <span class="glyphicon glyphicon-calendar"></span>
  64. </span>
  65. </div>
  66. </div>
  67. <%= label_tag :end_date, "Fecha", { class: "col-md-1 control-label" } do %> Hasta <% end %>
  68. <div class="col-sm-2" style="padding-left:0px;padding-right:0px;">
  69. <div class='input-group date' id='end_date'>
  70. <input id="end" type='text' class="form-control" value="<%= l(Date.today.end_of_month, format: '%d/%m/%Y') %>" />
  71. <span class="input-group-addon">
  72. <span class="glyphicon glyphicon-calendar"></span>
  73. </span>
  74. </div>
  75. </div>
  76. <button class="btn btn-icon-only blue" style="margin-left:25px" onclick="salesByDate()">
  77. <i class="fa fa-search"></i>
  78. </button>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. <input type='hidden' name='filter' id='filter' value='<%= @filter %>' >
  84. <input type='hidden' name='current_page' id='current_page' value='<%= @current_page %>' >
  85. <table class="table table-striped table-bordered table-hover" id="sales_table">
  86. <thead>
  87. <tr>
  88. <th>#</th>
  89. <th>Folio</th>
  90. <% if current_user.usertype == "A" || current_user.usertype == "SS" %>
  91. <th>Pto. de venta</th>
  92. <% end %>
  93. <th>Cliente</th>
  94. <th>Vendedor</th>
  95. <th>Fecha</th>
  96. <th>Tipo</th>
  97. <th>Productos</th>
  98. <th>Status</th>
  99. <th>Total</th>
  100. <th class="hide_c">Acciones</th>
  101. </tr>
  102. </thead>
  103. <tbody>
  104. <% @sales.each_with_index do |sale, key| %>
  105. <tr class=<%= (sale.cancelled? ? 'danger' : '') %>>
  106. <td><%= sale.id %></td>
  107. <td><%= sale.sale_code %> </td>
  108. <% if current_user.usertype == "A" || current_user.usertype == "SS" %>
  109. <td> <%= sale.get_pointsale.name %> </td>
  110. <% end %>
  111. <td><%= sale.customer.nick_name %> </td>
  112. <td><%= sale.seller.name %> </td>
  113. <td><%= l(sale.date_sale, format: '%d/%m/%Y') %></td>
  114. <td><%= sale_type(sale) %></td>
  115. <td><%= sale.sales_details.sum(:quantity).round %></td>
  116. <td><%= sale_status(sale) %></td>
  117. <td><%= number_to_currency(sale.total, precision: 2) %></td>
  118. <td class="text-center hide_c">
  119. <%= link_to sale, { class: "btn btn-icon-only default filtros", title: "Ver venta" } do %>
  120. <i class="fa fa-search"></i>
  121. <% end %>
  122. <%= link_to print_receipt_path(sale.id, format: 'pdf'), { class: "btn btn-icon-only default", target: "blank" } do %>
  123. <i class="fa fa-print"></i>
  124. <% end %>
  125. <% if (can? :delete, Sale) && sale.can_be_cancelled?(@pos_config) %>
  126. <%= link_to sale, method: :delete, class: "btn btn-icon-only btn-danger", title: "Cancelar venta", data: { confirm: '¿Está seguro que desea cancelar la venta?' } do %> <i class="fa fa-ban"></i><% end %>
  127. <% end %>
  128. </td>
  129. </tr>
  130. <% end %>
  131. </tbody>
  132. </table>
  133. </div>
  134. </div>
  135. </div>
  136. </div>
  137. </div>
  138. <!-- END PAGE CONTENT INNER -->
  139. </div>
  140. </div>
  141. <!-- END PAGE CONTENT BODY -->
  142. <!-- END CONTENT BODY -->
  143. </div>
  144. <!-- END CONTENT -->
  145. </div>
  146. <script>
  147. var closePrintView = function(e) {
  148. if(e.which == 27) {
  149. printViewClosed();
  150. $('.hide_c').removeClass("hidden");
  151. }
  152. };
  153. function printViewClosed() {
  154. $("#sales_table").dataTable().fnSetColumnVis('.hide_c', true);
  155. $(window).unbind('keyup', closePrintView);
  156. }
  157. $(document).on("page:change", function() {
  158. App.init();
  159. $('#start').datetimepicker({
  160. icons: {
  161. date: "fa fa-calendar"
  162. },
  163. format: "DD/MM/YYYY"
  164. });
  165. $('#end').datetimepicker({
  166. icons: {
  167. date: "fa fa-calendar"
  168. },
  169. format: "DD/MM/YYYY"
  170. });
  171. var startDate = moment($("#start").data("date"), "DD-MM-YYYY").format('DD/MM/YYYY');
  172. var endDate = moment($("#end").data("date"), "DD-MM-YYYY").format('DD/MM/YYYY');
  173. $('#title_for_print').val('Ventas del ' + startDate + ' al ' + endDate);
  174. });
  175. $.fn.dataTableExt.oStdClasses.sFilterInput = "form-control input-medium input-inline";
  176. $.extend(true, $.fn.DataTable.TableTools.classes, {
  177. "container": " pull-right margin-bottom-10",
  178. "buttons": {
  179. "normal": "btn btn-primary margin-right-10",
  180. "disabled": "disabled"
  181. },
  182. "collection": {
  183. "container": "DTTT_dropdown dropdown-menu tabletools-dropdown-menu "
  184. }
  185. });
  186. var table = $('#sales_table').dataTable({
  187. // T = tabletools; l = length changing; f = filtering input; t = table; i = table info; p = pagination
  188. "dom": "<'row' <'col-md-12'T>><'row'<'col-md-6 col-sm-12'l><'col-md-6 col-sm-12'f><'col-md-6 col-sm-12'>r><'table-scrollable't><'row'<'col-md-5 col-sm-12'i><'col-md-7 col-sm-12'p>>",
  189. "tableTools": {
  190. "aButtons": [{ // 1
  191. "sExtends": "collection",
  192. "sButtonText": "Acciones",
  193. "aButtons": [ // 2
  194. { "sExtends": "print",
  195. // "columnDefs": [{
  196. // "targets": 'hide_c',
  197. // "visible": false
  198. // }],
  199. "sButtonText": "Imprimir",
  200. "sInfo": 'Presiona "CTR+P" para imprmir o "ESC" para salir',
  201. "sMessage": function() {
  202. return "<h2>Lista de ventas desde el " + $("#start").val() + " al " + $("#end").val() + "</h2>";
  203. },
  204. "fnClick": function(nButton, oConfig) {
  205. table.fnSetColumnVis('.hide_c', false);
  206. $(window).keyup(closePrintView);
  207. this.fnPrint(true, oConfig);
  208. }
  209. },
  210. // { "sExtends": "pdf",
  211. // "sPdfOrientation": "landscape",
  212. // "columnDefs": [{
  213. // "targets": 'hide_c',
  214. // "visible": false
  215. // }],
  216. // "sButtonText": "PDF"
  217. // }
  218. ] // 2
  219. }] // 1
  220. },
  221. "fixedHeader": true,
  222. "language": {
  223. "aria": {
  224. "sortAscending": ": activate to sort column ascending",
  225. "sortDescending": ": activate to sort column descending"
  226. },
  227. "emptyTable": "No hay informacion en la tabla",
  228. "info": "Mostrando del _START_ al _END_ de _TOTAL_ registros",
  229. "infoEmpty": "No se encontraron coincidencias",
  230. "infoFiltered": "(filtrado un total de _MAX_ registros)",
  231. "lengthMenu": "Mostrar _MENU_ registros",
  232. "search": "Buscar:",
  233. "zeroRecords": "No se encontraron coincidencias",
  234. "paginate": {
  235. "sPrevious": "Ant",
  236. "sNext": "Sig"
  237. }
  238. },
  239. "order": [
  240. // [0, 'asc']
  241. ],
  242. "lengthMenu": [
  243. [20, 50, 75, 100, -1],
  244. [20, 50, 75, 100, "Todos"] // change per page values here
  245. ],
  246. "pageLength": 20,
  247. "bServerSide": false
  248. });
  249. function salesByDate() {
  250. if ($("#start").val() && $("#end").val()) {
  251. var start = moment($("#start").data("date"), "DD-MM-YYYY").format('YYYY-MM-DD HH:mm:ss');
  252. var end = moment($("#end").data("date"), "DD-MM-YYYY").format('YYYY-MM-DD HH:mm:ss');
  253. } else {
  254. var start = "";
  255. var end = "";
  256. }
  257. App.blockUI({
  258. target: $("#sales_table"),
  259. animate: true
  260. });
  261. $.ajax({
  262. type: "get",
  263. url: '/find_sales_by_date/' + start + '/' + end,
  264. dataType: 'script',
  265. success: function(data) {
  266. window.setTimeout(function() {
  267. App.unblockUI($("#sales_table"));
  268. var startDate = moment($("#start").data("date"), "DD-MM-YYYY").format('DD/MM/YYYY')
  269. var endDate = moment($("#end").data("date"), "DD-MM-YYYY").format('DD/MM/YYYY');
  270. $('#title_for_print').val('Ventas del ' + startDate + ' al ' + endDate);
  271. }, 100);
  272. }
  273. });
  274. }
  275. </script>