navigation.rb 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. # -*- coding: utf-8 -*-
  2. # Configures your navigation
  3. module SimpleNavigationn
  4. module Renderer
  5. class BootstrapBreadcrumbs < SimpleNavigation::Renderer::Base
  6. def render(item_container)
  7. content_tag(:ul, li_tags(item_container).join(join_with), id: item_container.dom_id, class: "page-breadcrumb breadcrumb")
  8. end
  9. protected
  10. def li_tags(item_container)
  11. item_container.items.inject([]) do |list, item|
  12. # rubocop:disable Style/IfInsideElse
  13. if item.selected?
  14. if include_sub_navigation?(item)
  15. list << content_tag(:li, link_to(item.name[:text], item.url, { method: item.method }.merge(item.html_options.except(:class, :id)))) if item.selected?
  16. list.concat li_tags(item.sub_navigation)
  17. elsif item.name.is_a? String
  18. list << content_tag(:li, item.name, class: 'active ') if item.selected?
  19. else
  20. list << content_tag(:li, item.name[:text], class: 'active ') if item.selected?
  21. end
  22. else
  23. next
  24. end
  25. # rubocop:enable Style/IfInsideElse
  26. end
  27. list
  28. end
  29. end
  30. def join_with
  31. @join_with ||= options[:join_with] || ' <i class="fa fa-circle"></i> '
  32. content_tag(:li, content_tag(:span, @join_with, class: 'divider'))
  33. end
  34. end
  35. end
  36. SimpleNavigation.register_renderer bootstrap_breadcrumbs: SimpleNavigationn::Renderer::BootstrapBreadcrumbs
  37. # rubocop:disable Metrics/BlockLength
  38. SimpleNavigation::Configuration.run do |navigation|
  39. navigation.renderer = SimpleNavigationRenderers::Bootstrap3
  40. navigation.items do |primary|
  41. if current_user.usertype == 'A' || current_user.usertype == "SS"
  42. # clientes
  43. primary.item :customers, { icon: "fa fa-fw fa-smile-o", text: "Clientes" }, customers_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  44. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  45. sub_nav.item :new_customer, 'Nuevo Cliente', new_customer_path
  46. sub_nav.item :list_customers, 'Lista de clientes', customers_path
  47. sub_nav.item :divider_after_list_customers, '#', divider: true
  48. sub_nav.item :special_prices, 'Descuentos especiales por cliente', new_special_price_path
  49. end
  50. # proveedores
  51. primary.item :suppliers, { icon: "fa fa-fw fa-suitcase", text: "Proveedores" }, suppliers_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  52. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  53. sub_nav.item :new_supplier, 'Nuevo Proveedor', new_supplier_path
  54. sub_nav.item :list_suppliers, 'Lista de proveedores', suppliers_path
  55. end
  56. # productos
  57. primary.item :products, { icon: "fa fa-fw fa-cubes", text: "Productos" }, products_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  58. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  59. sub_nav.item :units, 'Unidades de medida', units_path
  60. sub_nav.item :divider_before_categories, '#', divider: true
  61. sub_nav.item :new_category, 'Nueva línea de producto', new_category_path
  62. sub_nav.item :list_categories, 'Lista de líneas de producto', categories_path
  63. sub_nav.item :divider_before_products, '#', divider: true
  64. sub_nav.item :new_product, 'Nuevo Producto', new_product_path
  65. sub_nav.item :list_products, 'Lista de productos', products_path
  66. sub_nav.item :stock_by_pointsale, 'Existencias', stock_by_pointsale_path
  67. sub_nav.item :list_waste_of_products, 'Lista de mermas de productos', product_wastes_path
  68. sub_nav.item :divider_before_purchases, '#', divider: true
  69. sub_nav.item :new_product, 'Nueva Compra', new_purchase_path
  70. sub_nav.item :list_products, 'Lista de compras', purchases_path
  71. sub_nav.item :divider_before_purchases, '#', divider: true
  72. sub_nav.item :product_track, 'Seguimiento de productos', product_track_path
  73. end
  74. # puntos de venta y caja registradora
  75. primary.item :pointsales, { icon: "fa fa-fw fa-cart-plus", text: "Puntos de venta" }, pointsales_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  76. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  77. sub_nav.item :new_pointsale, 'Nuevo Punto de venta', new_pointsale_path
  78. sub_nav.item :list_pointsales, 'Lista de puntos de venta', pointsales_path
  79. sub_nav.item :divider_before_pointsales, '#', divider: true
  80. sub_nav.item :list_cash_registers, 'Lista de cajas', cash_registers_path
  81. sub_nav.item :list_cash_outs, 'Lista de cortes de caja', cash_outs_path
  82. sub_nav.item :divider_before_sellers, '#', divider: true
  83. sub_nav.item :list_sellers, 'Lista de vendedores', sellers_path
  84. sub_nav.item :divider_after_sellers, '#', divider: true
  85. sub_nav.item :new_transfer, 'Nuevo traspaso', new_transfer_path
  86. sub_nav.item :list_transfers, 'Lista de traspasos', transfers_path
  87. sub_nav.item :divider_after_list_users, '#', divider: true
  88. sub_nav.item :list_warehouse, 'Almacenes', warehouses_path
  89. end
  90. # ventas
  91. primary.item :sales, { icon: "fa fa-fw fa-money", text: "Ventas" }, sales_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  92. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  93. sub_nav.item :list_sales, 'Lista de ventas', sales_path
  94. sub_nav.item :divider_after_list_sales, '#', divider: true
  95. sub_nav.item :list_sales_reserved, 'Lista de apartados', sales_reserved_path
  96. sub_nav.item :commission, "Lista de comisiones", commissions_path
  97. end
  98. # egresos
  99. primary.item :expensesconcepts, { icon: "fa fa-fw fa-dollar", text: "Egresos" }, expensesconcepts_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  100. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  101. sub_nav.item :new_expensesconcept, 'Nuevo Concepto de egreso', new_expensesconcept_path
  102. sub_nav.item :list_expensesconcepts, 'Lista de conceptos de egreso', expensesconcepts_path
  103. sub_nav.item :divider_after_list_expensesconcepts, '#', divider: true
  104. sub_nav.item :new_expense, 'Nuevo egreso', new_expense_path
  105. sub_nav.item :list_expenses, 'Lista de egresos', expenses_path
  106. end
  107. # reportes
  108. primary.item :reports, { icon: "fa fa-bar-chart", text: "Reportes" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  109. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  110. sub_nav.item :sales_per_month, 'Ventas por mes', sales_per_month_report_path
  111. sub_nav.item :minmax_report, 'Mínimos y Máximos', min_max_path
  112. end
  113. # configuracion
  114. primary.item :config, { icon: "fa fa-fw fa-cog", text: "Configuración" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  115. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  116. sub_nav.item :pos_configs, 'Configurar parámetros generales', pos_configs_path
  117. sub_nav.item :divider_after_list_transfers, '#', divider: true
  118. sub_nav.item :list_products_initial_stock, 'Stock inicial de productos', products_initial_stock_path
  119. sub_nav.item :list_products_stock, 'Stock mínimo y máximo de productos', products_stock_path
  120. sub_nav.item :divider_after_list_transfers, '#', divider: true
  121. sub_nav.item :list_users, 'Usuarios del sistema', users_path
  122. end
  123. # soporte
  124. primary.item :support, { icon: "fa fa-fw fa-group", text: "Soporte" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  125. sub_nav.dom_attributes = { class: "dropdown-menu pull-left" }
  126. sub_nav.item :send_info, "Soporte técnico", contact_support_path
  127. end
  128. end
  129. if current_user.usertype == 'G'
  130. primary.item :home, { icon: "fa fa-fw fa-home", text: "Inicio" }, root_path, class: 'menu-dropdown classic-menu-dropdown'
  131. # clientes
  132. primary.item :customers, { icon: "fa fa-fw fa-smile-o", text: "Clientes" }, customers_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  133. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  134. sub_nav.item :new_customer, 'Nuevo Cliente', new_customer_path
  135. sub_nav.item :list_customers, 'Lista de clientes', customers_path
  136. sub_nav.item :debtor_customers, 'Clientes deudores', debtors_path
  137. end
  138. # proveedores
  139. primary.item :suppliers, { icon: "fa fa-fw fa-suitcase", text: "Proveedores" }, suppliers_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  140. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  141. sub_nav.item :new_supplier, 'Nuevo Proveedor', new_supplier_path
  142. sub_nav.item :list_suppliers, 'Lista de proveedores', suppliers_path
  143. end
  144. # productos
  145. primary.item :products, { icon: "fa fa-fw fa-cubes", text: "Productos" }, products_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  146. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  147. sub_nav.item :units, 'Unidades de medida', units_path
  148. sub_nav.item :divider_before_categories, '#', divider: true
  149. sub_nav.item :new_category, 'Nueva línea de producto', new_category_path
  150. sub_nav.item :list_categories, 'Lista de líneas de producto', categories_path
  151. sub_nav.item :divider_before_products, '#', divider: true
  152. sub_nav.item :new_product, 'Nuevo Producto', new_product_path
  153. sub_nav.item :list_products, 'Lista de productos', products_path
  154. sub_nav.item :divider_after_list_products, '#', divider: true
  155. sub_nav.item :stock_by_pointsale, 'Existencias', stock_by_pointsale_path
  156. sub_nav.item :divider_after_stock_by_pointsale, '#', divider: true
  157. sub_nav.item :list_waste, 'Nueva merma de productos', new_product_waste_path
  158. sub_nav.item :list_waste_of_products, 'Lista de mermas de productos', product_wastes_path
  159. sub_nav.item :divider_before_purchases, '#', divider: true
  160. sub_nav.item :new_purchase, 'Nueva Compra', new_purchase_path
  161. sub_nav.item :purchases_list, 'Lista de compras', purchases_path
  162. end
  163. # ventas
  164. primary.item :sales, { icon: "fa fa-fw fa-money", text: "Ventas" }, sales_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  165. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  166. sub_nav.item :new_sale, 'Nueva venta', new_sale_path
  167. sub_nav.item :list_sales, 'Lista de ventas', sales_path
  168. sub_nav.item :divider_after_list_sales, '#', divider: true
  169. sub_nav.item :list_sales_reserved, 'Lista de apartados', sales_reserved_path
  170. sub_nav.item :divider_after_list_sales_reserved, '#', divider: true
  171. sub_nav.item :commission, "Lista de comisiones", commissions_path
  172. sub_nav.item :divider_after_list_comissions, '#', divider: true
  173. sub_nav.item :list_products_return, 'Lista de devoluciones', products_returns_path
  174. end
  175. # punto de venta, caja registradora y vendedores
  176. primary.item :pointsales, { icon: "fa fa-fw fa-cart-plus", text: "Puntos de venta" }, pointsales_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  177. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  178. sub_nav.item :list_products, 'Lista de cajas ', cash_registers_path
  179. sub_nav.item :divider_after_list_products, '#', divider: true
  180. sub_nav.item :list_cash_outs, 'Lista de cortes de caja', cash_outs_path
  181. sub_nav.item :divider_after_list_cash_outs, '#', divider: true
  182. sub_nav.item :list_sellers, 'Lista de vendedores', sellers_path
  183. sub_nav.item :divider_after_list_sellers, '#', divider: true
  184. sub_nav.item :new_transfer, 'Nuevo traspaso', new_transfer_path
  185. sub_nav.item :list_transfers, 'Lista de traspasos', transfers_path
  186. sub_nav.item :divider_after_list_transfers, '#', divider: true
  187. sub_nav.item :list_warehouse, 'Almacenes', warehouses_path
  188. end
  189. # coneptos de egresos
  190. primary.item :expensesconcepts, { icon: "fa fa-fw fa-dollar", text: "Egresos" }, expensesconcepts_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  191. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  192. sub_nav.item :new_expensesconcept, 'Nuevo egreso', new_expense_path
  193. sub_nav.item :list_expensesconcepts, 'Lista de egresos', expenses_path
  194. sub_nav.item :divider_after_expenses, '#', divider: true
  195. sub_nav.item :list_expensesconcepts, 'Lista de conceptos de egreso', expensesconcepts_path
  196. end
  197. # configuracion
  198. primary.item :config, { icon: "fa fa-fw fa-cog", text: "Configuración" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  199. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  200. sub_nav.item :list_products_initial_stock, 'Stock inicial de productos', products_initial_stock_path(pointsale_id: current_user.pointsale_id)
  201. sub_nav.item :list_products_stock, 'Stock mínimo y máximo de productos', products_stock_path(pointsale_id: current_user.pointsale_id)
  202. sub_nav.item :divider_after_list_transfers, '#', divider: true
  203. sub_nav.item :list_users, 'Usuarios del sistema', users_path
  204. end
  205. # soporte
  206. primary.item :support, { icon: "fa fa-fw fa-group", text: "Soporte" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  207. sub_nav.dom_attributes = { class: "dropdown-menu pull-left" }
  208. sub_nav.item :send_info, "Soporte técnico", contact_support_path
  209. end
  210. end
  211. if current_user.usertype == 'C'
  212. primary.item :home, { icon: "fa fa-fw fa-home", text: "Inicio" }, root_path, class: 'menu-dropdown classic-menu-dropdown'
  213. # clientes
  214. primary.item :customers, { icon: "fa fa-fw fa-smile-o", text: "Clientes" }, customers_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  215. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  216. sub_nav.item :new_customer, 'Nuevo Cliente', new_customer_path
  217. sub_nav.item :list_customers, 'Lista de clientes', customers_path
  218. sub_nav.item :divider_after_list_customers, '#', divider: true
  219. sub_nav.item :debtor_customers, 'Clientes deudores', debtors_path
  220. end
  221. # productos
  222. primary.item :products, { icon: "fa fa-fw fa-cubes", text: "Productos" }, products_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  223. sub_nav.item :stock_by_pointsale, 'Existencias', stock_by_pointsale_path
  224. sub_nav.item :divider_after_stock_by_pointsale, '#', divider: true
  225. sub_nav.item :list_waste, 'Nueva merma de productos', new_product_waste_path
  226. sub_nav.item :list_waste_of_products, 'Lista de mermas de productos', product_wastes_path
  227. end
  228. # ventas
  229. primary.item :sales, { icon: "fa fa-fw fa-money", text: "Ventas" }, sales_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  230. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  231. sub_nav.item :new_sale, 'Nueva venta', new_sale_path
  232. sub_nav.item :list_sales, 'Lista de ventas', sales_path
  233. sub_nav.item :divider_after_list_sales, '#', divider: true
  234. sub_nav.item :list_sales_reserved, 'Lista de apartados', sales_reserved_path
  235. sub_nav.item :divider_after_list_comissions, '#', divider: true
  236. sub_nav.item :list_products_return, 'Lista de devoluciones', products_returns_path
  237. end
  238. # caja y cortes de caja
  239. primary.item :cash_register, { icon: "fa fa-shopping-cart", text: "Caja" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  240. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  241. sub_nav.item :cash_out, 'Corte de caja', new_cash_out_path
  242. # sub_nav.item :list_cash_outs, 'Lista de cortes de caja', cash_outs_path
  243. end
  244. # conceptos de egresos
  245. primary.item :expenses, { icon: "fa fa-fw fa-dollar", text: "Egresos" }, expenses_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  246. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  247. sub_nav.item :new_expense, 'Nuevo egreso', new_expense_path
  248. sub_nav.item :list_expenses, 'Lista de egresos', expenses_path
  249. end
  250. # conceptos de egresos
  251. primary.item :transfers, { icon: "fa fa-fw fa-dollar", text: "Traspasos" }, transfers_path, class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  252. sub_nav.dom_attributes = { class: 'dropdown-menu pull-left' }
  253. sub_nav.item :new_transfer, 'Nuevo traspaso', new_transfer_path
  254. sub_nav.item :list_expenses, 'Lista de traspasos', transfers_path
  255. end
  256. # soporte
  257. primary.item :support, { icon: "fa fa-fw fa-group", text: "Configuración" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  258. sub_nav.dom_attributes = { class: "dropdown-menu pull-left" }
  259. sub_nav.item :send_info, "Soporte técnico", contact_support_path
  260. end
  261. end
  262. if current_user.usertype == 'S'
  263. primary.item :home, { icon: "fa fa-fw fa-home", text: "Inicio" }, root_path, class: 'menu-dropdown classic-menu-dropdown'
  264. # existencias
  265. primary.item :products, { icon: "fa fa-fw fa-cubes", text: "Existencias" }, stock_by_pointsale_path, class: 'menu-dropdown classic-menu-dropdown'
  266. # traspasos
  267. primary.item :transfers, { icon: "fa fa-fw fa-exchange", text: "Traspasos" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  268. sub_nav.item :new_transfer, 'Nuevo traspaso', new_transfer_path
  269. sub_nav.item :list_transfers, 'Lista de traspasos', transfers_path
  270. end
  271. # mermas
  272. primary.item :product_wastes, { icon: "fa fa-fw fa-arrow-down", text: "Mermas" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  273. sub_nav.item :list_waste, 'Nueva merma de productos', new_product_waste_path
  274. sub_nav.item :list_waste_of_products, 'Lista de mermas de productos', product_wastes_path
  275. end
  276. # inventario
  277. primary.item :stock, { icon: "fa fa-fw fa-database", text: "Inventario" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  278. sub_nav.item :initial_stock, 'Inventario inicial', products_initial_stock_path(current_user.warehouse_id)
  279. sub_nav.item :stock_adjustment, 'Ajuste de inventario', products_stock_path(current_user.warehouse_id)
  280. end
  281. # soporte
  282. primary.item :support, { icon: "fa fa-fw fa-group", text: "Soporte" }, '#', class: 'menu-dropdown classic-menu-dropdown' do |sub_nav|
  283. sub_nav.dom_attributes = { class: "dropdown-menu pull-left" }
  284. sub_nav.item :send_info, "Soporte técnico", contact_support_path
  285. end
  286. end
  287. class BootstrapBreadcrumbs < SimpleNavigation::Renderer::Base
  288. def render(item_container)
  289. content_tag(:ul, li_tags(item_container).join(join_with), id: item_container.dom_id, class: "#{item_container.dom_class} breadcrumb")
  290. end
  291. protected
  292. def li_tags(item_container)
  293. item_container.items.inject([]) do |list, item|
  294. # rubocop:disable Style/IfInsideElse
  295. if item.selected?
  296. if include_sub_navigation?(item)
  297. list << content_tag(:li, link_to(item.name, item.url, { method: item.method }.merge(item.html_options.except(:class, :id)))) if item.selected?
  298. list.concat li_tags(item.sub_navigation)
  299. else
  300. list << content_tag(:li, item.name, class: 'active') if item.selected?
  301. end
  302. end
  303. # rubocop:enable Style/IfInsideElse
  304. list
  305. end
  306. end
  307. def join_with
  308. @join_with ||= options[:join_with] || '<span class="divider">/</span>'.html_safe
  309. end
  310. end
  311. end
  312. end
  313. # rubocop:enable Metrics/BlockLength