_form.html.erb 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <%= form_for(@cash_out, :remote => true, :html => {:class=>"form-horizontal", :id=> "cash_out_form"}) do |f| %>
  2. <div class="portlet-body form">
  3. <div class="alert alert-danger hidden" id="error_explanation"></div>
  4. <div class="col-md-12">
  5. <%= hidden_field_tag 'open_cash_register_id', @opened_cash_register.id %>
  6. <%= hidden_field_tag 'cash_payment_id', @cash_payment_method_id %>
  7. <div class="form-group">
  8. <%= f.label :received_by_id, "Recibe", {:class=>"col-md-3 control-label"} do %> Recibe
  9. <span class="required">*</span>
  10. <% end %>
  11. <div class="input-group col-md-6 select2-bootstrap-prepend">
  12. <%= f.collection_select :received_by_id, User.where(:pointsale_id => current_user.pointsale_id), :id, :userid, {:prompt => "Seleccione" },
  13. {:class => "form-control select2"} %>
  14. </div>
  15. </div>
  16. <h4 class="form-section" style="margin:0px 0px 30px 0px"> Resumen</h4>
  17. <div class="col-md-4" style="padding-left: 0px">
  18. <ul class="list-group">
  19. <li class="list-group-item list-group-item"> Efectivo inicial
  20. <span class="pull-right label label-info"><%= number_to_currency(@initial_cash, precision: 2) %></span>
  21. </li>
  22. <li class="list-group-item list-group-item"> Ventas de contado
  23. <span class="pull-right label label-info"><%= number_to_currency(@cash_sales, precision: 2) %></span>
  24. </li>
  25. <li class="list-group-item list-group-item"> Apartados<br>(anticipos, abonos y liquidaciones)
  26. <span class="pull-right label label-info"><%= number_to_currency(@reserved_sales, precision: 2) %></span>
  27. </li>
  28. <li class="list-group-item list-group-item"> Abonos a crédito
  29. <span class="pull-right label label-info"><%= number_to_currency(@credit_sales, precision: 2) %></span>
  30. </li>
  31. <li class="list-group-item list-group-item"> Total de egresos
  32. <span class="pull-right label label-info"><%= number_to_currency(@expenses_total, precision: 2) %></span>
  33. </li>
  34. </ul>
  35. </div>
  36. <div class="col-md-offset-2 col-md-6" style="padding-right:0px">
  37. <div class="form-group credit_limits">
  38. <%= f.label :physical_cash, {:class=>"col-md-4 control-label"} do %>Efectivo en caja<span class="required">*</span> <% end %>
  39. <div class="col-md-8">
  40. <div class="input-group">
  41. <span class="input-group-addon"> $ </span>
  42. <%= f.text_field :physical_cash, {:class=>"form-control mask_decimal"} %>
  43. </div>
  44. <span class="help-block">Es el dinero que se tiene físicamente en caja. </span>
  45. </div>
  46. </div>
  47. <div class="form-group credit_limits">
  48. <%= f.label :received_cash, {:class=>"col-md-4 control-label"} do %>Retiro de efectivo<span class="required">*</span> <% end %>
  49. <div class="col-md-8">
  50. <div class="input-group">
  51. <span class="input-group-addon"> $ </span>
  52. <%= f.text_field :received_cash, {:class=>"form-control mask_decimal", :onkeyup => "receivedAndFundCash()", :disabled => true} %>
  53. </div>
  54. </div>
  55. </div>
  56. <div class="form-group credit_limits">
  57. <%= f.label :cash_fund, {:class=>"col-md-4 control-label"} do %>Fondo de caja<span class="required">*</span> <% end %>
  58. <div class="col-md-8">
  59. <div class="input-group">
  60. <span class="input-group-addon"> $ </span>
  61. <%= text_field_tag :cash_fund_display, '', class: "form-control mask_decimal", disabled: true %>
  62. <!-- < %= f.hidden_field(:cash_fund) %> -->
  63. <%= f.hidden_field :cash_fund, {:class=>"form-control mask_decimal"} %>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="form-group credit_limits">
  68. <%= f.label :observations, {:class=>"col-md-4 control-label"} do %>Observaciones<span class="required" id="required_observations"></span> <% end %>
  69. <div class="col-md-8">
  70. <div class="input-group">
  71. <span class="input-group-addon"> <i class="fa fa-comment-o"></i> </span>
  72. <%= f.text_area :observations, {:class=>"form-control", :rows=>5 } %>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. <div class="row">
  78. <div class="col-md-12">
  79. <div class="table-scrollable">
  80. <table class="table table-hover table-striped table-bordered" id="payment_methods_table">
  81. <thead>
  82. <tr>
  83. <th> # </th>
  84. <th> Método de pago </th>
  85. <th> Total de ingresos (ventas) </th>
  86. <th> Total de egresos (gastos) </th>
  87. <th>Total (ventas y efectivo inicial)</th>
  88. </tr>
  89. </thead>
  90. <tbody>
  91. <% @payments.each_with_index do |payment, key| %>
  92. <tr id="payment_<%= payment['payment_method_id']%>">
  93. <td> <%= key +1 %> </td>
  94. <td> <%= payment["method"] %> </td>
  95. <td> <%= number_to_currency(payment["incoming"], precision: 2) %> </td>
  96. <td class="danger"> <%= number_to_currency(payment["outgoing"], precision: 2) %> </td>
  97. <td>
  98. <%= number_to_currency(payment["total"], precision: 2) %>
  99. <input class="hidden" value="<%= payment["total"] %>" id="<%= key + 1 %>">
  100. </td>
  101. </tr>
  102. <%= f.fields_for :cash_out_details do |ff| %>
  103. <%= ff.hidden_field :payment_method_id, :value => payment["payment_method_id"] %>
  104. <%= ff.hidden_field :incoming, :value => payment["incoming"] %>
  105. <%= ff.hidden_field :outgoing, :value => payment["outgoing"] %>
  106. <%= ff.hidden_field :total, :value => payment["total"] %>
  107. <% end %>
  108. <% end %>
  109. </tbody>
  110. </table>
  111. </div>
  112. </div>
  113. </div>
  114. <h4 class="form-section"> Ingresos del día</h4>
  115. <table class="table table-striped table-bordered table-hover tableadvanced">
  116. <thead>
  117. <tr>
  118. <th>#</th>
  119. <th>Folio</th>
  120. <th>Caja registradora</th>
  121. <th>Método de pago</th>
  122. <th>Cantidad</th>
  123. <th>Concepto</th>
  124. <th>Hora</th>
  125. </tr>
  126. </thead>
  127. <tbody>
  128. <% @incomings.each_with_index do |move, key| %>
  129. <tr <%= move.sale.cancelled? ? 'class=danger' : "" %>>
  130. <td><%= key += 1 %></td>
  131. <td><%= move_concept_folio(move) %></td>
  132. <td><%= move.open_cash_register.cash_register.name %></td>
  133. <td><%= move.payment_method.method %></td>
  134. <td><%= number_to_currency(move.quantity, precision: 2) %></td>
  135. <td><%= cash_move_type(move) %></td>
  136. <td><%= l(move.created_at, format: '%I:%M %p') %> </td>
  137. </tr>
  138. <% end %>
  139. <!-- -->
  140. </tbody>
  141. </table>
  142. <h4 class="form-section"> Egresos del día</h4>
  143. <table class="table table-striped table-bordered table-hover tableadvanced">
  144. <thead>
  145. <tr>
  146. <th>#</th>
  147. <th>Folio</th>
  148. <th>Caja registradora</th>
  149. <th>Método de pago</th>
  150. <th>Cantidad</th>
  151. <th>Concepto</th>
  152. <th>Hora</th>
  153. </tr>
  154. </thead>
  155. <tbody>
  156. <% @outgoings.each_with_index do |move, key| %>
  157. <tr>
  158. <td><%= key + 1 %></td>
  159. <td><%= move_concept_folio(move) %></td>
  160. <td><%= move.open_cash_register.cash_register.name %></td>
  161. <td><%= move.payment_method.method %></td>
  162. <td><%= number_to_currency(move.quantity, precision: 2) %></td>
  163. <td>
  164. <% case move.concept %>
  165. <% when "sale" %>
  166. <% if move.sale.cash? %>
  167. VENTA CANCELADA
  168. <% elsif move.sale.reserved? %>
  169. APARTADO CANCELADO
  170. <% end %>
  171. <% when "purchase" %>
  172. COMPRA
  173. <% when "expense" %>
  174. <strong> <%= move.expense.expensesconcept.name %></strong> <br>
  175. <%= move.expense.observations %>
  176. <% when "credit_payment" %>
  177. ABONO CANCELADO
  178. <% end %>
  179. </td>
  180. <td><%= l(move.created_at, :format => '%I:%M %p') %> </td>
  181. </tr>
  182. <% end %>
  183. </tbody>
  184. </table>
  185. </div>
  186. <!-- acciones del form -->
  187. <div style="margin-top: 30px">
  188. <div class="row">
  189. <div class="col-md-9">
  190. <button type="button" class="btn green" onclick="addCashOut()" disabled id="submit_cash_out">Guardar</button>
  191. <%= link_to 'Cancelar', root_path, { class: "btn default" } %>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. <% end %>
  197. <script type="text/javascript">
  198. var timeout = null;
  199. var cashOutValid = false;
  200. $(document).on("page:change", function() {
  201. $('.dataTables_filter').hide();
  202. $('#cash_out_physical_cash').keyup(function() {
  203. var physicalCash = $('#cash_out_physical_cash').val();
  204. if(physicalCash) {
  205. $('#cash_out_received_cash').attr('disabled', false);
  206. } else {
  207. $('#cash_out_received_cash').attr('disabled', true);
  208. $('#cash_out_received_cash').val('');
  209. }
  210. receivedAndFundCash();
  211. });
  212. });
  213. function addCashOut() {
  214. if($("#cash_out_received_by_id option:selected").val() && $("#cash_out_received_cash").val()) {
  215. $("#cash_out_form").submit();
  216. } else {
  217. toastr["error"]("Faltan datos del formulario");
  218. }
  219. }
  220. function receivedAndFundCash() {
  221. clearTimeout(timeout);
  222. timeout = setTimeout(function () {
  223. var physicalCash = parseFloat($('#cash_out_physical_cash').val());
  224. var receivedCash = parseFloat($('#cash_out_received_cash').val());
  225. if(!isNaN(physicalCash) && !isNaN(receivedCash)) {
  226. var cashFund = physicalCash - receivedCash;
  227. $('#cash_out_cash_fund').val(cashFund);
  228. $('#cash_fund_display').val(cashFund);
  229. if(receivedCash > physicalCash) {
  230. toastr["error"]("El retiro de efectivo no puede ser mayor al efectivo disponible en caja.");
  231. $('#submit_cash_out').attr('disabled', true);
  232. $('#cash_out_cash_fund').val('');
  233. $('#cash_fund_display').val('');
  234. } else {
  235. $('#submit_cash_out').attr('disabled', false);
  236. }
  237. } else {
  238. $('#submit_cash_out').attr('disabled', true);
  239. }
  240. }, 300);
  241. }
  242. </script>