vyapari 0.1.5dev10 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/vyapari/admin/base_controller.rb +0 -9
  3. data/app/controllers/vyapari/admin/countries_controller.rb +2 -2
  4. data/app/controllers/vyapari/admin/dashboard_controller.rb +1 -3
  5. data/app/controllers/vyapari/admin/exchange_rates_controller.rb +2 -2
  6. data/app/controllers/vyapari/admin/regions_controller.rb +1 -1
  7. data/app/controllers/vyapari/admin/resource_controller.rb +0 -1
  8. data/app/controllers/vyapari/admin/users_controller.rb +130 -0
  9. data/app/controllers/vyapari/application_controller.rb +0 -11
  10. data/app/models/brand.rb +19 -67
  11. data/app/models/category.rb +19 -63
  12. data/app/models/country.rb +7 -31
  13. data/app/models/exchange_rate.rb +7 -32
  14. data/app/models/product.rb +20 -75
  15. data/app/models/region.rb +20 -37
  16. data/app/models/vyapari/application_record.rb +0 -3
  17. data/app/views/layouts/kuppayam/_footer.html.erb +1 -1
  18. data/app/views/layouts/kuppayam/_sidebar.html.erb +44 -45
  19. data/app/views/vyapari/admin/countries/_index.html.erb +1 -1
  20. data/app/views/vyapari/admin/countries/index.html.erb +3 -19
  21. data/app/views/vyapari/admin/exchange_rates/_form.html.erb +4 -3
  22. data/app/views/vyapari/admin/exchange_rates/_index.html.erb +7 -7
  23. data/app/views/vyapari/admin/exchange_rates/_row.html.erb +3 -3
  24. data/app/views/vyapari/admin/exchange_rates/_show.html.erb +0 -1
  25. data/app/views/vyapari/admin/exchange_rates/index.html.erb +3 -19
  26. data/app/views/vyapari/admin/regions/_index.html.erb +1 -1
  27. data/app/views/vyapari/admin/regions/index.html.erb +3 -19
  28. data/app/views/vyapari/admin/users/_form.html.erb +39 -0
  29. data/app/views/vyapari/admin/users/_index.html.erb +101 -0
  30. data/app/views/vyapari/admin/users/_row.html.erb +72 -0
  31. data/app/views/vyapari/admin/users/_show.html.erb +199 -0
  32. data/app/views/vyapari/admin/{categories → users}/index.html.erb +24 -8
  33. data/config/routes.rb +5 -66
  34. data/db/migrate/20170000000200_create_exchange_rates.rb +2 -3
  35. data/lib/tasks/vyapari_tasks.rake +4 -0
  36. data/lib/vyapari/version.rb +1 -1
  37. metadata +15 -167
  38. data/app/assets/images/vyapari/sample_stock_bundle.csv +0 -1
  39. data/app/controllers/vyapari/admin/brands_controller.rb +0 -99
  40. data/app/controllers/vyapari/admin/categories_controller.rb +0 -115
  41. data/app/controllers/vyapari/admin/products_controller.rb +0 -79
  42. data/app/controllers/vyapari/admin/stores_controller.rb +0 -67
  43. data/app/controllers/vyapari/admin/suppliers_controller.rb +0 -67
  44. data/app/controllers/vyapari/admin/terminals_controller.rb +0 -150
  45. data/app/controllers/vyapari/store_manager/base_controller.rb +0 -33
  46. data/app/controllers/vyapari/store_manager/dashboard_controller.rb +0 -31
  47. data/app/controllers/vyapari/store_manager/reports/invoices_controller.rb +0 -249
  48. data/app/controllers/vyapari/store_manager/reports/sales_controller.rb +0 -299
  49. data/app/controllers/vyapari/store_manager/reports/stock_controller.rb +0 -132
  50. data/app/controllers/vyapari/store_manager/resource_controller.rb +0 -17
  51. data/app/controllers/vyapari/store_manager/stock_bundles_controller.rb +0 -206
  52. data/app/controllers/vyapari/store_manager/stock_entries_controller.rb +0 -161
  53. data/app/controllers/vyapari/terminal_staff/base_controller.rb +0 -38
  54. data/app/controllers/vyapari/terminal_staff/dashboard_controller.rb +0 -35
  55. data/app/controllers/vyapari/terminal_staff/invoices_controller.rb +0 -147
  56. data/app/controllers/vyapari/terminal_staff/line_items_controller.rb +0 -139
  57. data/app/controllers/vyapari/terminal_staff/resource_controller.rb +0 -17
  58. data/app/controllers/vyapari/user_dashboard_controller.rb +0 -31
  59. data/app/models/bank_account.rb +0 -44
  60. data/app/models/contact.rb +0 -72
  61. data/app/models/image/brand_image.rb +0 -3
  62. data/app/models/image/category_image.rb +0 -3
  63. data/app/models/image/product_image.rb +0 -3
  64. data/app/models/invoice.rb +0 -256
  65. data/app/models/line_item.rb +0 -207
  66. data/app/models/stock_bundle.rb +0 -249
  67. data/app/models/stock_entry.rb +0 -275
  68. data/app/models/store.rb +0 -302
  69. data/app/models/supplier.rb +0 -79
  70. data/app/models/terminal.rb +0 -158
  71. data/app/uploaders/brand_image_uploader.rb +0 -14
  72. data/app/uploaders/category_image_uploader.rb +0 -14
  73. data/app/uploaders/product_image_uploader.rb +0 -14
  74. data/app/uploaders/stock_bundle_uploader.rb +0 -10
  75. data/app/views/layouts/vyapari/_store_manager_menu.html.erb +0 -126
  76. data/app/views/layouts/vyapari/_terminal_staff_menu.html.erb +0 -106
  77. data/app/views/layouts/vyapari/store_manager.html.erb +0 -112
  78. data/app/views/layouts/vyapari/terminal_staff.html.erb +0 -116
  79. data/app/views/vyapari/admin/brands/_form.html.erb +0 -23
  80. data/app/views/vyapari/admin/brands/_index.html.erb +0 -89
  81. data/app/views/vyapari/admin/brands/_row.html.erb +0 -63
  82. data/app/views/vyapari/admin/brands/_show.html.erb +0 -104
  83. data/app/views/vyapari/admin/brands/index.html.erb +0 -48
  84. data/app/views/vyapari/admin/categories/_form.html.erb +0 -28
  85. data/app/views/vyapari/admin/categories/_index.html.erb +0 -101
  86. data/app/views/vyapari/admin/categories/_row.html.erb +0 -69
  87. data/app/views/vyapari/admin/categories/_show.html.erb +0 -115
  88. data/app/views/vyapari/admin/products/_form.html.erb +0 -32
  89. data/app/views/vyapari/admin/products/_index.html.erb +0 -58
  90. data/app/views/vyapari/admin/products/_row.html.erb +0 -30
  91. data/app/views/vyapari/admin/products/_show.html.erb +0 -81
  92. data/app/views/vyapari/admin/products/index.html.erb +0 -48
  93. data/app/views/vyapari/admin/stores/_form.html.erb +0 -37
  94. data/app/views/vyapari/admin/stores/_index.html.erb +0 -84
  95. data/app/views/vyapari/admin/stores/_row.html.erb +0 -55
  96. data/app/views/vyapari/admin/stores/_show.html.erb +0 -110
  97. data/app/views/vyapari/admin/stores/index.html.erb +0 -48
  98. data/app/views/vyapari/admin/suppliers/_form.html.erb +0 -32
  99. data/app/views/vyapari/admin/suppliers/_index.html.erb +0 -58
  100. data/app/views/vyapari/admin/suppliers/_row.html.erb +0 -30
  101. data/app/views/vyapari/admin/suppliers/_show.html.erb +0 -81
  102. data/app/views/vyapari/admin/suppliers/index.html.erb +0 -48
  103. data/app/views/vyapari/admin/terminals/_form.html.erb +0 -24
  104. data/app/views/vyapari/admin/terminals/_index.html.erb +0 -75
  105. data/app/views/vyapari/admin/terminals/_row.html.erb +0 -49
  106. data/app/views/vyapari/admin/terminals/_show.html.erb +0 -74
  107. data/app/views/vyapari/store_manager/dashboard/_sales_counts.html.erb +0 -90
  108. data/app/views/vyapari/store_manager/dashboard/_stock_counts.html.erb +0 -63
  109. data/app/views/vyapari/store_manager/dashboard/_terminals.html.erb +0 -23
  110. data/app/views/vyapari/store_manager/dashboard/index.html.erb +0 -64
  111. data/app/views/vyapari/store_manager/reports/invoices/_index.html.erb +0 -65
  112. data/app/views/vyapari/store_manager/reports/invoices/index.html.erb +0 -105
  113. data/app/views/vyapari/store_manager/reports/sales/_index.html.erb +0 -64
  114. data/app/views/vyapari/store_manager/reports/sales/index.html.erb +0 -105
  115. data/app/views/vyapari/store_manager/reports/stock/_index.html.erb +0 -72
  116. data/app/views/vyapari/store_manager/reports/stock/index.html.erb +0 -32
  117. data/app/views/vyapari/store_manager/stock_bundles/_form.html.erb +0 -99
  118. data/app/views/vyapari/store_manager/stock_bundles/_index.html.erb +0 -74
  119. data/app/views/vyapari/store_manager/stock_bundles/_row.html.erb +0 -44
  120. data/app/views/vyapari/store_manager/stock_bundles/_show.html.erb +0 -110
  121. data/app/views/vyapari/store_manager/stock_bundles/create.html.erb +0 -57
  122. data/app/views/vyapari/store_manager/stock_bundles/index.html.erb +0 -36
  123. data/app/views/vyapari/store_manager/stock_bundles/update.html.erb +0 -57
  124. data/app/views/vyapari/store_manager/stock_entries/_form.html.erb +0 -50
  125. data/app/views/vyapari/store_manager/stock_entries/_index.html.erb +0 -80
  126. data/app/views/vyapari/store_manager/stock_entries/_row.html.erb +0 -33
  127. data/app/views/vyapari/store_manager/stock_entries/_show.html.erb +0 -110
  128. data/app/views/vyapari/store_manager/stock_entries/_stock_bundle.html.erb +0 -61
  129. data/app/views/vyapari/store_manager/stock_entries/index.html.erb +0 -45
  130. data/app/views/vyapari/terminal_staff/dashboard/_counts.html.erb +0 -131
  131. data/app/views/vyapari/terminal_staff/dashboard/_invoices.html.erb +0 -44
  132. data/app/views/vyapari/terminal_staff/dashboard/_search_form.html.erb +0 -6
  133. data/app/views/vyapari/terminal_staff/dashboard/_search_results.html.erb +0 -24
  134. data/app/views/vyapari/terminal_staff/dashboard/index.html.erb +0 -56
  135. data/app/views/vyapari/terminal_staff/dashboard/search.js.erb +0 -12
  136. data/app/views/vyapari/terminal_staff/invoices/_draft.html.erb +0 -62
  137. data/app/views/vyapari/terminal_staff/invoices/_form.html.erb +0 -134
  138. data/app/views/vyapari/terminal_staff/invoices/_index.html.erb +0 -70
  139. data/app/views/vyapari/terminal_staff/invoices/_row.html.erb +0 -33
  140. data/app/views/vyapari/terminal_staff/invoices/_show.html.erb +0 -204
  141. data/app/views/vyapari/terminal_staff/invoices/index.html.erb +0 -35
  142. data/app/views/vyapari/terminal_staff/invoices/new.js.erb +0 -18
  143. data/app/views/vyapari/terminal_staff/invoices/show.html.erb +0 -1
  144. data/app/views/vyapari/terminal_staff/invoices/show.js.erb +0 -13
  145. data/app/views/vyapari/terminal_staff/line_items/_form.html.erb +0 -40
  146. data/app/views/vyapari/terminal_staff/line_items/_index.html.erb +0 -96
  147. data/app/views/vyapari/terminal_staff/line_items/create.js.erb +0 -34
  148. data/app/views/vyapari/terminal_staff/line_items/destroy.js.erb +0 -25
  149. data/app/views/vyapari/user_dashboard/index.html.erb +0 -51
  150. data/db/import_data/brands.csv +0 -7
  151. data/db/import_data/categories.csv +0 -12
  152. data/db/import_data/countries.csv +0 -1
  153. data/db/import_data/dummy/brands.csv +0 -7
  154. data/db/import_data/dummy/categories.csv +0 -12
  155. data/db/import_data/dummy/countries.csv +0 -1
  156. data/db/import_data/dummy/exchange_rates.csv +0 -5
  157. data/db/import_data/dummy/products-copy.csv +0 -1
  158. data/db/import_data/dummy/products.csv +0 -1
  159. data/db/import_data/dummy/products.xlsx +0 -0
  160. data/db/import_data/dummy/regions.csv +0 -13
  161. data/db/import_data/dummy/stores.csv +0 -10
  162. data/db/import_data/dummy/suppliers.csv +0 -14
  163. data/db/import_data/dummy/terminals.csv +0 -11
  164. data/db/import_data/exchange_rates.csv +0 -5
  165. data/db/import_data/regions.csv +0 -13
  166. data/db/import_data/stores.csv +0 -3
  167. data/db/import_data/suppliers.csv +0 -14
  168. data/db/import_data/terminals.csv +0 -3
  169. data/db/migrate/20170000000203_create_contacts.rb +0 -22
  170. data/db/migrate/20170000000204_create_bank_accounts.rb +0 -21
  171. data/db/migrate/20170000000205_create_suppliers.rb +0 -18
  172. data/db/migrate/20170000000206_create_stores.rb +0 -21
  173. data/db/migrate/20170000000207_create_terminals.rb +0 -18
  174. data/db/migrate/20170000000210_create_brands.rb +0 -14
  175. data/db/migrate/20170000000211_create_categories.rb +0 -22
  176. data/db/migrate/20170000000212_create_products.rb +0 -29
  177. data/db/migrate/20170000000213_create_invoices.rb +0 -61
  178. data/db/migrate/20170000000215_create_stock_bundles.rb +0 -17
  179. data/db/migrate/20170000000216_create_stock_entries.rb +0 -20
  180. data/db/sample_reports/products.xlsx +0 -0
  181. data/lib/tasks/vyapari/all.rake +0 -73
@@ -1,33 +0,0 @@
1
- module Vyapari
2
- module StoreManager
3
- class BaseController < ApplicationController
4
-
5
- layout 'vyapari/store_manager'
6
-
7
- before_action :require_user
8
-
9
- private
10
-
11
- def set_default_title
12
- set_title("Vyapari Store | Vyapari Stock Management Module")
13
- end
14
-
15
- def get_nested_resource_objects
16
- @store = Store.find_by_id(params[:store_id])
17
- end
18
-
19
- def configure_filter_param_mapping
20
- @filter_param_mapping = default_filter_param_mapping
21
- @filter_param_mapping[:stock_bundle] = :sb
22
- @filter_param_mapping[:store] = :st
23
- @filter_param_mapping[:supplier] = :sp
24
- @filter_param_mapping[:brand] = :br
25
- @filter_param_mapping[:category] = :ct
26
- @filter_param_mapping[:payment_method] = :pym
27
- @filter_param_mapping[:terminal] = :trm
28
- @filter_param_mapping[:user] = :usr
29
- end
30
-
31
- end
32
- end
33
- end
@@ -1,31 +0,0 @@
1
- module Vyapari
2
- module StoreManager
3
- class DashboardController < Vyapari::StoreManager::BaseController
4
-
5
- # GET /dashboard
6
- def index
7
- @date = params[:date] ? Date.parse(params[:date]) : Date.today
8
- @terminals = @store.terminals
9
- end
10
-
11
- private
12
-
13
- def breadcrumbs_configuration
14
- {
15
- heading: "#{@store.name}",
16
- description: "A Quick view of stock & sales",
17
- links: [
18
- {name: "Home", link: user_dashboard_path, icon: 'fa-dashboard'},
19
- {name: @store.name, link: store_manager_dashboard_path(@store), icon: 'fa-dashboard'}
20
- ]
21
- }
22
- end
23
-
24
- def set_navs
25
- set_nav("store_manager/dashboard")
26
- end
27
-
28
- end
29
- end
30
- end
31
-
@@ -1,249 +0,0 @@
1
- module Vyapari
2
- module StoreManager
3
- module Reports
4
- class InvoicesController < Vyapari::StoreManager::BaseController
5
-
6
- def index
7
- @relation = Invoice.select("
8
- invoices.customer_name as customer_name,
9
- invoices.customer_address as customer_address,
10
- invoices.customer_phone as customer_phone,
11
- invoices.customer_email as customer_email,
12
-
13
- invoices.invoice_number as invoice_number,
14
- invoices.invoice_date as invoice_date,
15
-
16
- invoices.discount as discount,
17
- TRUNCATE(invoices.net_total_amount, 2) as net_total_amount,
18
-
19
- invoices.payment_method as payment_method,
20
- invoices.credit_card_number as credit_card_number,
21
- invoices.cheque_number as cheque_number,
22
-
23
- u.name as user_name
24
- ").
25
- joins("LEFT JOIN users u ON invoices.user_id = u.id").
26
- where("invoices.status = 'active'").
27
- where("invoices.store_id = ?", @store.id)
28
-
29
- parse_filters
30
- apply_filters
31
- set_columns
32
-
33
- @results = @relation.all
34
-
35
- @total = @relation.except(:select).
36
- select("SUM(invoices.id) as id,
37
- SUM(invoices.net_total_amount) as net_total_amount")
38
-
39
- render_report
40
- end
41
-
42
- private
43
-
44
- def apply_filters
45
- @relation = @relation.search(@query) if @query
46
-
47
- if @terminal == "null"
48
- @relation = @relation.where("invoices.terminal_id IS NULL")
49
- elsif @terminal
50
- @relation = @relation.where("invoices.terminal_id = ?",@terminal.id)
51
- end
52
-
53
- if @user == "null"
54
- @relation = @relation.where("invoices.user_id IS NULL")
55
- elsif @user
56
- @relation = @relation.where("invoices.user_id = ?",@user.id)
57
- end
58
-
59
- if @payment_method == "null"
60
- @relation = @relation.where("invoices.payment_method IS NULL")
61
- elsif @payment_method
62
- @relation = @relation.where("invoices.payment_method = ?",@payment_method)
63
- end
64
-
65
- @relation = @relation.order(@order_by_options[@order_by.to_sym])
66
- end
67
-
68
- def configure_filter_settings
69
-
70
- @order_by_options = {
71
- invoice_date_desc: "invoices.invoice_date DESC",
72
- invoice_date_asc: "invoices.invoice_date ASC",
73
- customer_name_desc: "invoices.customer_name DESC",
74
- customer_name_asc: "invoices.customer_name ASC",
75
- total_amount_asc: "invoices.net_total_amount DeSC",
76
- total_amount_asc: "invoices.net_total_amount ASC"
77
- }
78
-
79
- @filter_settings = {
80
- string_filters: [
81
- { filter_name: :query },
82
- { filter_name: :order_by, options: {default: :invoice_date_desc} },
83
- { filter_name: :payment_method }
84
- ],
85
-
86
- reference_filters: [
87
- { filter_name: :user, filter_class: User },
88
- { filter_name: :terminal, filter_class: Terminal },
89
- ],
90
-
91
- variable_filters: [
92
- { variable_name: :store, filter_name: :store }
93
- ]
94
- }
95
- end
96
-
97
- def configure_filter_ui_settings
98
- @filter_ui_settings = {
99
- terminal: {
100
- object_filter: true,
101
- select_label: 'Filter by Terminal',
102
- current_value: @terminal,
103
- values: @store.terminals.order(:name).all,
104
- current_filters: @filters,
105
- url_method_name: 'store_manager_invoices_report_url',
106
- filters_to_remove: [:terminal, :store],
107
- filters_to_add: {},
108
- show_null_filter_on_top: false
109
- },
110
- user: {
111
- object_filter: true,
112
- select_label: 'Filter by User',
113
- current_value: @user,
114
- values: User.order(:name).all,
115
- current_filters: @filters,
116
- url_method_name: 'store_manager_invoices_report_url',
117
- filters_to_remove: [:terminal, :store],
118
- filters_to_add: {},
119
- show_null_filter_on_top: true
120
- },
121
- payment_method: {
122
- object_filter: false,
123
- select_label: "Filter by Payment Method",
124
- display_hash: Invoice::PAYMENT_METHOD_REVERSE,
125
- current_value: @payment_method,
126
- values: Invoice::PAYMENT_METHOD,
127
- current_filters: @filters,
128
- filters_to_remove: [],
129
- filters_to_add: {},
130
- url_method_name: 'store_manager_invoices_report_url',
131
- show_all_filter_on_top: true
132
- },
133
- order_by: {
134
- object_filter: false,
135
- select_label: "Order by",
136
- display_hash: Hash[@order_by_options.keys.map {|i| [i, i.to_s.titleize]}],
137
- current_value: @order_by,
138
- values: Hash[@order_by_options.keys.map {|i| [i.to_s.titleize, i]}],
139
- current_filters: @filters,
140
- filters_to_remove: [],
141
- filters_to_add: {},
142
- url_method_name: 'store_manager_invoices_report_url',
143
- show_all_filter_on_top: true
144
- },
145
- }
146
- end
147
-
148
- def set_columns
149
- @columns = [
150
- { column_name: :id, display_name: "Sl.", align: "center", column_type: :integer },
151
- { column_name: :customer_name, display_name: "Customer Name", align: "center", column_type: :string },
152
- { column_name: :customer_address, display_name: "Customer Address", align: "center", column_type: :string },
153
- { column_name: :customer_phone, display_name: "Customer Phone", align: "center", column_type: :string },
154
- { column_name: :customer_email, display_name: "Customer Email", align: "center", column_type: :string },
155
- { column_name: :invoice_number, display_name: "Invoice Number", align: "center", column_type: :string },
156
- { column_name: :invoice_date, display_name: "Invoice Date", align: "center", column_type: :date },
157
- { column_name: :discount, display_name: "Discount %", align: "center", column_type: :integer },
158
- { column_name: :net_total_amount, display_name: "Total Amount", align: "right", column_type: :currency },
159
- { column_name: :payment_method, display_name: "Payment Method", align: "center", column_type: :status },
160
- { column_name: :credit_card_number, display_name: "Credit Card Number", align: "center", column_type: :string },
161
- { column_name: :cheque_number, display_name: "Cheque Number", align: "center", column_type: :string },
162
- { column_name: :user_name, display_name: "User", align: "center", column_type: :string }
163
- ]
164
-
165
- if params[:cols]
166
- @selected_columns = params[:cols].map{|x| x.to_sym}
167
- else
168
- @selected_columns = [:id, :invoice_number, :invoice_date, :net_total_amount]
169
- end
170
- end
171
-
172
- def breadcrumbs_configuration
173
- {
174
- heading: "Invoices Report",
175
- description: "Invoices Report",
176
- links: [{name: "Change Store", link: user_dashboard_path, icon: 'fa-desktop'},
177
- {name: @store.name, link: store_manager_dashboard_path(@store), icon: 'fa-dashboard'},
178
- {name: "Invoices Reports", link: nil, icon: 'fa-list', active: true}]
179
- }
180
- end
181
-
182
- def set_navs
183
- set_nav("store_manager/reports")
184
- end
185
-
186
- def render_report
187
- respond_to do |format|
188
- format.html {}
189
- format.csv do
190
- send_data generate_csv(@results),
191
- :type => 'text/csv; charset=utf-8; header=present',
192
- :disposition => "attachment; filename=invoice-report.csv",
193
- :filename => "invoice-report.csv"
194
- end
195
- format.pdf do
196
- render :pdf => "#{@heading} (As on #{Date.today})"
197
- #:disposition => 'attachment'
198
- #:show_as_html => true
199
- end
200
- end
201
- end
202
-
203
- def generate_csv(results)
204
-
205
- CSV.generate(headers: true) do |csv|
206
- # Adding the headings
207
- csv << @columns.select{|col_item| @selected_columns.include?(col_item[:column_name])}.collect{|x| x[:display_name]}
208
-
209
- # Adding the results
210
- @results.each_with_index do |result, i|
211
-
212
- # Remove Id as we get it with i in each_with_index
213
- cols_without_id = @columns.reject{|col_item| col_item[:column_name] == :id}
214
-
215
- # Select columns which are selected by the user / default
216
- selected_cols = cols_without_id.select{|col_item| @selected_columns.include?(col_item[:column_name]) }
217
-
218
- # Initialize result row with just serial number
219
- result_data = [i+1]
220
-
221
- # Iterate selected columns and populate the result data
222
- selected_cols.each do |col_item|
223
-
224
- case col_item[:column_type]
225
- when :string, :integer
226
- result_data << result.send(col_item[:column_name])
227
- when :status
228
- result_data << result.send(col_item[:column_name]).titleize
229
- when :currency
230
- result_data << sprintf("%.2f", result.send(col_item[:column_name]))
231
- when :date
232
- result_data << result.send(col_item[:column_name]).strftime("%d-%m-%Y")
233
- else
234
- result_data << result.send(col_item[:column_name])
235
- end
236
-
237
- end
238
-
239
- # Append to CSV
240
- csv << result_data
241
- end
242
- end
243
-
244
- end
245
-
246
- end
247
- end
248
- end
249
- end
@@ -1,299 +0,0 @@
1
- module Vyapari
2
- module StoreManager
3
- module Reports
4
- class SalesController < Vyapari::StoreManager::BaseController
5
-
6
-
7
- # select p.name, p.ean_sku, p.retail_price,
8
- # se.quantity, i.invoice_number, i.invoice_date,
9
- # i.payment_method from stock_entries se
10
- # left join products p on p.id = se.product_id
11
- # left join invoices i on i.id = se.invoice_id
12
- # where se.status = 'sold'
13
- def index
14
- @relation = StockEntry.select("p.name as product_name,
15
- p.ean_sku as ean_sku,
16
- p.retail_price as retail_price,
17
- stock_entries.quantity as quantity,
18
- u.name as user_name,
19
- i.invoice_number as invoice_number,
20
- i.invoice_date as invoice_date,
21
- i.payment_method as payment_method").
22
- joins("LEFT JOIN products p ON stock_entries.product_id = p.id").
23
- joins("LEFT JOIN invoices i ON stock_entries.invoice_id = i.id").
24
- joins("LEFT JOIN users u ON i.user_id = u.id").
25
- where("stock_entries.status = 'sold'").
26
- where("stock_entries.store_id = ?", @store.id)
27
-
28
- parse_filters
29
- apply_filters
30
- set_columns
31
-
32
- #.page(@current_page).per(@per_page)
33
- @results = @relation.all
34
-
35
- @total = @relation.except(:select).
36
- select("SUM(stock_entries.id) as id,
37
- SUM(p.retail_price) as retail_price")
38
-
39
- render_report
40
- end
41
-
42
- # select MAX(p.id) as id, MAX(p.name) as name,
43
- # MAX(p.ean_sku) as ean_sku,
44
- # MAX(p.purchased_price) as purchased_price,
45
- # MAX(p.landed_price) as landed_price,
46
- # MAX(p.selling_price) as selling_price,
47
- # MAX(p.retail_price) as retail_price,
48
- # SUM(se.quantity) as se_quantity,
49
- # MAX(se.status) as se_status
50
- # from products p left join stock_entries se
51
- # on se.product_id = p.id group by p.id;
52
- def index_old
53
- @relation = Product.select("MAX(products.id) as id,
54
- MAX(products.name) as name,
55
- MAX(products.ean_sku) as ean_sku,
56
- MAX(products.purchased_price) as purchased_price,
57
- MAX(products.landed_price) as landed_price,
58
- MAX(products.selling_price) as selling_price,
59
- MAX(products.retail_price) as retail_price,
60
- MAX(se.status) as se_status,
61
- SUM(se.quantity) as se_quantity").
62
- joins("LEFT JOIN stock_entries se ON se.product_id = products.id")
63
-
64
- parse_filters
65
- apply_filters
66
-
67
- @results = @relation.group("products.id").page(@current_page).per(@per_page)
68
- @total = @relation.except(:select).
69
- select("SUM(products.id) as id,
70
- SUM(products.purchased_price) as purchased_price,
71
- SUM(products.landed_price) as landed_price,
72
- SUM(products.selling_price) as selling_price,
73
- SUM(products.retail_price) as retail_price")
74
-
75
- render_report
76
- end
77
-
78
- private
79
-
80
- def apply_filters
81
- @relation = @relation.search(@query) if @query
82
- # @relation = @relation.where("se.se_status = ?", @status) if @status
83
-
84
- if @terminal == "null"
85
- @relation = @relation.where("i.terminal_id IS NULL")
86
- elsif @terminal
87
- @relation = @relation.where("i.terminal_id = ?",@terminal.id)
88
- end
89
-
90
- if @brand == "null"
91
- @relation = @relation.where("p.brand_id IS NULL")
92
- elsif @brand
93
- @relation = @relation.where("p.brand_id = ?",@brand.id)
94
- end
95
-
96
- if @category == "null"
97
- @relation = @relation.where("p.category_id IS NULL")
98
- elsif @category
99
- @relation = @relation.where("p.category_id = ?",@category.id)
100
- end
101
-
102
- if @payment_method == "null"
103
- @relation = @relation.where("i.payment_method IS NULL")
104
- elsif @payment_method
105
- @relation = @relation.where("i.payment_method = ?",@payment_method)
106
- end
107
-
108
- @relation = @relation.order(@order_by_options[@order_by.to_sym])
109
- end
110
-
111
- def set_columns
112
- @columns = [
113
- { column_name: :id, display_name: "Sl.", align: "center", column_type: :integer },
114
- { column_name: :product_name, display_name: "Product Name", align: "left", column_type: :string },
115
- { column_name: :ean_sku, display_name: "EAN/SKU", align: "left", column_type: :string },
116
- { column_name: :retail_price, display_name: "Retail Price", align: "right", column_type: :currency },
117
- { column_name: :quantity, display_name: "Quantity", align: "center", column_type: :integer },
118
- { column_name: :invoice_number, display_name: "Invoice Number", align: "center", column_type: :string },
119
- { column_name: :invoice_date, display_name: "Invoice Date", align: "center", column_type: :date },
120
- { column_name: :payment_method, display_name: "Payment Method", align: "center", column_type: :status },
121
- { column_name: :user_name, display_name: "User", align: "center", column_type: :string }
122
- ]
123
-
124
- if params[:cols]
125
- @selected_columns = params[:cols].map{|x| x.to_sym}
126
- else
127
- @selected_columns = [:id, :product_name, :ean_sku, :retail_price, :quantity, :invoice_number]
128
- end
129
- end
130
-
131
- def configure_filter_settings
132
-
133
- @order_by_options = {
134
- invoice_date_desc: "i.invoice_date DESC",
135
- invoice_date_asc: "i.invoice_date ASC",
136
- quantity_desc: "stock_entries.quantity DESC",
137
- quantity_asc: "stock_entries.quantity ASC",
138
- product_name_asc: "p.name ASC, p.ean_sku ASC",
139
- product_name_desc: "p.name DESC, p.ean_sku DESc"}
140
-
141
- @filter_settings = {
142
- string_filters: [
143
- { filter_name: :query },
144
- { filter_name: :order_by, options: {default: :invoice_date_desc} },
145
- { filter_name: :payment_method }
146
- ],
147
-
148
- reference_filters: [
149
- { filter_name: :brand, filter_class: Brand },
150
- { filter_name: :category, filter_class: Category },
151
- { filter_name: :terminal, filter_class: Terminal },
152
- ],
153
-
154
- variable_filters: [
155
- { variable_name: :store, filter_name: :store }
156
- ]
157
- }
158
- end
159
-
160
- def configure_filter_ui_settings
161
- @filter_ui_settings = {
162
- terminal: {
163
- object_filter: true,
164
- select_label: 'Filter by Terminal',
165
- current_value: @terminal,
166
- values: @store.terminals.order(:name).all,
167
- current_filters: @filters,
168
- url_method_name: 'store_manager_sales_report_url',
169
- filters_to_remove: [:terminal, :store],
170
- filters_to_add: {},
171
- show_null_filter_on_top: false
172
- },
173
- brand: {
174
- object_filter: true,
175
- select_label: 'Filter by Brand',
176
- current_value: @brand,
177
- values: Brand.order(:name).all,
178
- current_filters: @filters,
179
- url_method_name: 'store_manager_sales_report_url',
180
- filters_to_remove: [:terminal, :store],
181
- filters_to_add: {},
182
- show_null_filter_on_top: true
183
- },
184
- category: {
185
- object_filter: true,
186
- select_label: 'Filter by Category',
187
- current_value: @category,
188
- values: Category.order(:name).all,
189
- current_filters: @filters,
190
- url_method_name: 'store_manager_sales_report_url',
191
- filters_to_remove: [:terminal, :store],
192
- filters_to_add: {},
193
- show_null_filter_on_top: true
194
- },
195
- payment_method: {
196
- object_filter: false,
197
- select_label: "Filter by Payment Method",
198
- display_hash: Invoice::PAYMENT_METHOD_REVERSE,
199
- current_value: @payment_method,
200
- values: Invoice::PAYMENT_METHOD,
201
- current_filters: @filters,
202
- filters_to_remove: [],
203
- filters_to_add: {},
204
- url_method_name: 'store_manager_sales_report_url',
205
- show_all_filter_on_top: true
206
- },
207
- order_by: {
208
- object_filter: false,
209
- select_label: "Order by",
210
- display_hash: Hash[@order_by_options.keys.map {|i| [i, i.to_s.titleize]}],
211
- current_value: @order_by,
212
- values: Hash[@order_by_options.keys.map {|i| [i.to_s.titleize, i]}],
213
- current_filters: @filters,
214
- filters_to_remove: [],
215
- filters_to_add: {},
216
- url_method_name: 'store_manager_sales_report_url',
217
- show_all_filter_on_top: true
218
- },
219
- }
220
- end
221
-
222
- def breadcrumbs_configuration
223
- {
224
- heading: "Sales Report",
225
- description: "Sales Report",
226
- links: [{name: "Change Store", link: user_dashboard_path, icon: 'fa-desktop'},
227
- {name: @store.name, link: store_manager_dashboard_path(@store), icon: 'fa-dashboard'},
228
- {name: "Sales Reports", link: nil, icon: 'fa-list', active: true}]
229
- }
230
- end
231
-
232
- def set_navs
233
- set_nav("store_manager/reports")
234
- end
235
-
236
- def render_report
237
- respond_to do |format|
238
- format.html {}
239
- format.csv do
240
- send_data generate_csv(@results),
241
- :type => 'text/csv; charset=utf-8; header=present',
242
- :disposition => "attachment; filename=sales-report.csv",
243
- :filename => "sales-report.csv"
244
- end
245
- format.pdf do
246
- render :pdf => "#{@heading} (As on #{Date.today})"
247
- #:disposition => 'attachment'
248
- #:show_as_html => true
249
- end
250
- end
251
- end
252
-
253
- def generate_csv(results)
254
-
255
- CSV.generate(headers: true) do |csv|
256
- # Adding the headings
257
- csv << @columns.select{|col_item| @selected_columns.include?(col_item[:column_name])}.collect{|x| x[:display_name]}
258
-
259
- # Adding the results
260
- @results.each_with_index do |result, i|
261
-
262
- # Remove Id as we get it with i in each_with_index
263
- cols_without_id = @columns.reject{|col_item| col_item[:column_name] == :id}
264
-
265
- # Select columns which are selected by the user / default
266
- selected_cols = cols_without_id.select{|col_item| @selected_columns.include?(col_item[:column_name]) }
267
-
268
- # Initialize result row with just serial number
269
- result_data = [i+1]
270
-
271
- # Iterate selected columns and populate the result data
272
- selected_cols.each do |col_item|
273
-
274
- case col_item[:column_type]
275
- when :string, :integer
276
- result_data << result.send(col_item[:column_name])
277
- when :status
278
- result_data << result.send(col_item[:column_name]).titleize
279
- when :currency
280
- result_data << sprintf("%.2f", result.send(col_item[:column_name]))
281
- when :date
282
- result_data << result.send(col_item[:column_name]).strftime("%d-%m-%Y")
283
- else
284
- result_data << result.send(col_item[:column_name])
285
- end
286
-
287
- end
288
-
289
- # Append to CSV
290
- csv << result_data
291
- end
292
- end
293
-
294
- end
295
-
296
- end
297
- end
298
- end
299
- end