application_controller.rb 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. class ApplicationController < ActionController::Base
  2. # Prevent CSRF attacks by raising an exception.
  3. # For APIs, you may want to use :null_session instead.
  4. before_filter do
  5. resource = controller_path.singularize.gsub('/', '_').to_sym
  6. method = "#{resource}_params"
  7. params[resource] &&= send(method) if respond_to?(method, true)
  8. end
  9. before_filter :set_pos_config
  10. around_filter :user_time_zone, :if => :set_pos_config
  11. protect_from_forgery with: :exception
  12. ##--- Breadcrum_rails
  13. add_breadcrumb I18n.t("breadcrumbs.dashboard"), :root_path
  14. ##--- Restricción para autentificación
  15. before_action :authenticate_user!
  16. ##--- Notes boxes
  17. add_flash_types :success, :warning, :danger, :info
  18. ##--- Parametros permitidos para los usuarios
  19. before_action :configure_permitted_parameters, if: :devise_controller?
  20. ##--- Redireccionamiento para los permisos a modulos
  21. rescue_from CanCan::AccessDenied do |exception|
  22. redirect_to root_url, :alert => exception.message
  23. end
  24. ##--- Funciones personalizadas
  25. def getcounties
  26. render :json => SpmxCounty.where("state_id = ?", params[:state_id])
  27. end
  28. def find
  29. query = params[:query]
  30. if query.include? ':'
  31. # buscar con atributos
  32. product_name = query[0, query.index(':') -1]
  33. attribute = query[query.index(':') +1, query.length]
  34. else
  35. product_name = query
  36. end
  37. render json: (query.include? ':') ? Product.name_sku_barcode_attribute_like(product_name, attribute).limit(30).to_json(:methods => [:small_img, :display_attributes ]) : Product.name_sku_barcode_like(params[:query]).limit(30).to_json(:methods => [:small_img, :display_attributes ])
  38. end
  39. #para special_prices
  40. def find_sp
  41. query = params[:query]
  42. product_name = query
  43. render json: Product.name_sku_barcode_like_sp(product_name).limit(30).to_json(:methods => [:small_img ])
  44. end
  45. def find_from_stock
  46. query = params[:query]
  47. if query.include? ':'
  48. # buscar con atributos
  49. product_name = query[0, query.index(':') -1]
  50. attribute = query[query.index(':') +1, query.length]
  51. else
  52. product_name = query
  53. end
  54. if current_user.usertype == 'S'
  55. render json: (query.include? ':') ? Warehouse.find(current_user.warehouse_id).products.name_sku_barcode_attribute_like(product_name, attribute).where("stock > 0").limit(30).to_json(:methods => [:small_img, :display_attributes]) : Warehouse.find(current_user.warehouse_id).products.name_sku_barcode_like(params[:query]).where("stock > 0").limit(30).to_json(:methods => [:small_img, :display_attributes])
  56. else
  57. render json: (query.include? ':') ? Pointsale.find(current_user.pointsale_id).products.name_sku_barcode_attribute_like(product_name, attribute).where("stock > 0").limit(30).to_json(:methods => [:small_img, :display_attributes]) : Pointsale.find(current_user.pointsale_id).products.name_sku_barcode_like(params[:query]).where("stock > 0").limit(30).to_json(:methods => [:small_img, :display_attributes])
  58. end
  59. end
  60. def find_from_stock_by_pointsale
  61. id = params[:pointsale_id][2, params[:pointsale_id].length]
  62. query = params[:query]
  63. if query.include? ':'
  64. # buscar con atributos
  65. product_name = query[0, query.index(':') -1]
  66. attribute = query[query.index(':') +1, query.length]
  67. else
  68. product_name = query
  69. end
  70. if params[:pointsale_id].first == 'P'
  71. render json: (query.include? ':') ? Pointsale.find(id).products.name_sku_barcode_attribute_like(product_name, attribute).where("stock > 0").limit(30).to_json(:methods => [:small_img, :display_attributes]) : Pointsale.find(id).products.name_sku_barcode_like(params[:query]).where("stock > 0").limit(30).to_json(:methods => [:small_img, :display_attributes])
  72. else
  73. render json: (query.include? ':') ? Warehouse.find(id).products.name_sku_barcode_attribute_like(product_name, attribute).where("stock > 0").limit(30).to_json(:methods => [:small_img, :display_attributes]) : Warehouse.find(id).products.name_sku_barcode_like(params[:query]).where("stock > 0").limit(30).to_json(:methods => [:small_img, :display_attributes])
  74. end
  75. end
  76. def get_subcategories
  77. render :json => params[:category_id] != '0' ? Category.activos.where("parent_id = ?", params[:category_id]) : Category.activos.where('parent_id != 0')
  78. end
  79. def set_pos_config
  80. @pos_config = PosConfig.first
  81. end
  82. def user_time_zone(&block)
  83. Time.use_zone(@pos_config.time_zone, &block)
  84. end
  85. #eliminar pre_sales que ya estaban guardadas
  86. def delete_pre_sales
  87. PreSale.where(user_id: current_user.id).destroy_all
  88. respond_to do |format|
  89. format.json { head :no_content }
  90. end
  91. end
  92. #eliminar pre_purchases que ya estaban guardadas
  93. def delete_pre_purchases
  94. PrePurchase.where(user_id: current_user.id).destroy_all
  95. # render head :no_content
  96. respond_to do |format|
  97. format.json { head :no_content }
  98. end
  99. end
  100. #eliminar pre_purchases que ya estaban guardadas
  101. def delete_pre_transfers
  102. respond_to do |format|
  103. pre_transfers = PreTransfer.where(user_id: current_user.id)
  104. pre_transfers.each do |pre|
  105. if pre.destroy
  106. if pre.origin_is_pointsale == 1
  107. stock = AvailableProduct.find_by(:pointsale_id => pre.origin_id,
  108. :product_id => pre.product_id)
  109. else
  110. stock = WarehouseStock.find_by(:warehouse_id => pre.origin_id,
  111. :product_id => pre.product_id)
  112. end
  113. stock.stock += pre.quantity
  114. stock.save
  115. end
  116. end
  117. format.json { head :ok }
  118. end
  119. end
  120. def get_max_product_id
  121. render :json => Product.maximum(:id).to_i.next
  122. end
  123. def get_max_purchaseid_by_pointsale
  124. prefix = Pointsale.find(params[:pointsale_id]).prefix
  125. next_id = Purchase.where(:pointsale_id => params[:pointsale_id]).count.next
  126. render :json => "#{prefix}-C-#{next_id}"
  127. end
  128. def get_max_purchaseid_by_warehouse
  129. prefix = Warehouse.find(params[:warehouse_id]).prefix
  130. next_id = Purchase.where(:warehouse_id => params[:warehouse_id]).count.next
  131. render :json => "#{prefix}-C-#{next_id}"
  132. end
  133. def get_next_sale_code
  134. pointsale = OpenCashRegister.find(params[:open_cash_register_id]).cash_register.pointsale
  135. next_id = pointsale.sales.count.next
  136. render :json => "#{pointsale.prefix}-V-#{next_id}"
  137. end
  138. def get_next_expense_code
  139. if current_user.usertype == 'A'
  140. next_id = Expense.where("expense_code ilike ?", '%ADM%').count.next
  141. render :json => "ADM-E-#{next_id}"
  142. else
  143. pointsale = OpenCashRegister.find(params[:open_cash_register_id]).cash_register.pointsale
  144. next_id = pointsale.expenses.count.next
  145. render :json => "#{pointsale.prefix}-E-#{next_id}"
  146. end
  147. end
  148. def products_by_category_pointsale
  149. products = Array.new
  150. products_by_line = Array.new
  151. category_id = params[:category_id]
  152. id = params[:pointsale_id][2, params[:pointsale_id].length]
  153. categories = Category.find(category_id).self_and_descendents
  154. categories.each do |category|
  155. products_by_line += category.products
  156. end
  157. if params[:pointsale_id].first == 'P'
  158. Pointsale.find(id).products.each do |p|
  159. if products_by_line.include?(p)
  160. products << p
  161. end
  162. end
  163. else
  164. Warehouse.find(id).products.each do |p|
  165. if products_by_line.include?(p)
  166. products << p
  167. end
  168. end
  169. end
  170. render :json => products
  171. end
  172. protected
  173. ##--- Definir los parametros definidos para los usuarios en las diferentes rutas
  174. def configure_permitted_parameters
  175. # devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
  176. ###-- https://github.com/plataformatec/devise#strong-parameters
  177. ###-- https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address
  178. devise_parameter_sanitizer.for(:sign_up) { |u| u.permit( :userid, :first_name, :last_name, :email, :password, :remember_me) }
  179. # devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
  180. end
  181. def respond_modal_with(*args, &blk)
  182. options = args.extract_options!
  183. options[:responder] = ModalResponder
  184. respond_with *args, options, &blk
  185. end
  186. end