vyapari 0.1.5dev9 → 0.1.5dev10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/vyapari/store_manager/base_controller.rb +3 -0
- data/app/controllers/vyapari/store_manager/dashboard_controller.rb +1 -0
- data/app/controllers/vyapari/store_manager/reports/invoices_controller.rb +206 -101
- data/app/controllers/vyapari/store_manager/reports/sales_controller.rb +299 -0
- data/app/controllers/vyapari/store_manager/reports/stock_controller.rb +1 -1
- data/app/controllers/vyapari/terminal_staff/dashboard_controller.rb +2 -1
- data/app/models/bank_account.rb +44 -0
- data/app/models/brand.rb +8 -13
- data/app/models/category.rb +3 -3
- data/app/models/contact.rb +72 -0
- data/app/models/country.rb +6 -4
- data/app/models/exchange_rate.rb +2 -2
- data/app/models/invoice.rb +12 -8
- data/app/models/line_item.rb +3 -3
- data/app/models/product.rb +3 -3
- data/app/models/region.rb +11 -17
- data/app/models/stock_bundle.rb +4 -4
- data/app/models/stock_entry.rb +8 -7
- data/app/models/store.rb +52 -21
- data/app/models/supplier.rb +19 -25
- data/app/models/terminal.rb +3 -3
- data/app/models/vyapari/application_record.rb +1 -2
- data/app/views/layouts/vyapari/_store_manager_menu.html.erb +24 -5
- data/app/views/layouts/vyapari/_terminal_staff_menu.html.erb +6 -3
- data/app/views/layouts/vyapari/store_manager.html.erb +4 -4
- data/app/views/vyapari/store_manager/dashboard/_sales_counts.html.erb +90 -0
- data/app/views/vyapari/store_manager/dashboard/_stock_counts.html.erb +63 -0
- data/app/views/vyapari/store_manager/dashboard/_terminals.html.erb +23 -0
- data/app/views/vyapari/store_manager/dashboard/index.html.erb +51 -79
- data/app/views/vyapari/store_manager/reports/invoices/_index.html.erb +65 -0
- data/app/views/vyapari/store_manager/reports/invoices/index.html.erb +105 -0
- data/app/views/vyapari/store_manager/reports/sales/_index.html.erb +64 -0
- data/app/views/vyapari/store_manager/reports/sales/index.html.erb +105 -0
- data/app/views/vyapari/terminal_staff/dashboard/_counts.html.erb +61 -18
- data/config/routes.rb +2 -0
- data/db/migrate/20170000000203_create_contacts.rb +1 -1
- data/db/migrate/20170000000206_create_stores.rb +1 -1
- data/lib/vyapari/version.rb +1 -1
- metadata +16 -6
data/app/models/supplier.rb
CHANGED
@@ -2,14 +2,15 @@ class Supplier < Vyapari::ApplicationRecord
|
|
2
2
|
|
3
3
|
# Validations
|
4
4
|
validates :name, presence: true, length: {minimum: 2, maximum: 250}, allow_blank: false
|
5
|
-
validates :code, presence: true, uniqueness: true, length: {minimum: 2, maximum: 24}
|
6
|
-
validates :address,
|
7
|
-
validates :city,
|
5
|
+
validates :code, presence: true, uniqueness: true, length: {minimum: 2, maximum: 24}
|
6
|
+
validates :address, length: {minimum: 6, maximum: 1024}
|
7
|
+
validates :city, length: {minimum: 2, maximum: 56}
|
8
8
|
validates :country, presence: true
|
9
9
|
|
10
10
|
# Associations
|
11
11
|
belongs_to :country
|
12
|
-
has_many :
|
12
|
+
has_many :stock_entries
|
13
|
+
has_many :products, through: :stock_entries
|
13
14
|
|
14
15
|
# ------------------
|
15
16
|
# Class Methods
|
@@ -20,12 +21,15 @@ class Supplier < Vyapari::ApplicationRecord
|
|
20
21
|
# == Examples
|
21
22
|
# >>> obj.search(query)
|
22
23
|
# => ActiveRecord::Relation object
|
23
|
-
scope :search, lambda {|query| joins(:country).where("LOWER(name) LIKE LOWER('%#{query}%') OR
|
24
|
-
LOWER(code) LIKE LOWER('%#{query}%') OR
|
25
|
-
LOWER(address) LIKE LOWER('%#{query}%') OR
|
26
|
-
LOWER(city) LIKE LOWER('%#{query}%')
|
24
|
+
scope :search, lambda {|query| joins(:country).where("LOWER(suppliers.name) LIKE LOWER('%#{query}%') OR
|
25
|
+
LOWER(suppliers.code) LIKE LOWER('%#{query}%') OR
|
26
|
+
LOWER(suppliers.address) LIKE LOWER('%#{query}%') OR
|
27
|
+
LOWER(suppliers.city) LIKE LOWER('%#{query}%') OR
|
28
|
+
LOWER(countries.name) LIKE LOWER('%#{query}%')")}
|
29
|
+
|
30
|
+
# Import Methods
|
31
|
+
# ---------------
|
27
32
|
|
28
|
-
|
29
33
|
def self.save_row_data(row)
|
30
34
|
|
31
35
|
row.headers.each{ |cell| row[cell] = row[cell].to_s.strip }
|
@@ -58,7 +62,7 @@ class Supplier < Vyapari::ApplicationRecord
|
|
58
62
|
# ------------------
|
59
63
|
|
60
64
|
def display_name
|
61
|
-
|
65
|
+
"#{self.code_was}-#{self.name_was}"
|
62
66
|
end
|
63
67
|
|
64
68
|
def can_be_edited?
|
@@ -66,20 +70,10 @@ class Supplier < Vyapari::ApplicationRecord
|
|
66
70
|
end
|
67
71
|
|
68
72
|
def can_be_deleted?
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
# end
|
75
|
-
return true
|
76
|
-
end
|
77
|
-
|
78
|
-
def report_heading
|
79
|
-
rh = []
|
80
|
-
rh << self.company.try(:name) if self.company.name
|
81
|
-
rh << self.display_name
|
82
|
-
rh.join(", ")
|
73
|
+
if self.stock_entries.any?
|
74
|
+
return false
|
75
|
+
else
|
76
|
+
return true
|
77
|
+
end
|
83
78
|
end
|
84
|
-
|
85
79
|
end
|
data/app/models/terminal.rb
CHANGED
@@ -5,13 +5,13 @@ class Terminal < Vyapari::ApplicationRecord
|
|
5
5
|
INACTIVE = "inactive"
|
6
6
|
CLOSED = "closed"
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
STATUS = {"Active" => ACTIVE, "Inactive" => INACTIVE, "Closed" => CLOSED}
|
9
|
+
STATUS_REVERSE = {ACTIVE => "Active", INACTIVE => "Inactive", CLOSED => "Closed"}
|
10
10
|
|
11
11
|
# Validations
|
12
12
|
validates :name, presence: true, length: {minimum: 2, maximum: 250}, allow_blank: false
|
13
13
|
validates :code, presence: true, uniqueness: true, length: {minimum: 2, maximum: 24}, allow_blank: false
|
14
|
-
validates :status, :presence=> true, :inclusion => {:in =>
|
14
|
+
validates :status, :presence=> true, :inclusion => {:in => STATUS_REVERSE.keys, :presence_of => :status, :message => "%{value} is not a valid status" }
|
15
15
|
|
16
16
|
# Associations
|
17
17
|
belongs_to :store
|
@@ -5,8 +5,8 @@
|
|
5
5
|
<!-- Navbar Brand -->
|
6
6
|
<div class="navbar-brand">
|
7
7
|
<a href="dashboard-1.html" class="logo">
|
8
|
-
<img src="/assets/kuppayam/logo.png" width="
|
9
|
-
<img src="/assets/kuppayam/logo.png" width="
|
8
|
+
<img src="/assets/kuppayam/logo.png" width="180" alt="" class="hidden-xs" />
|
9
|
+
<img src="/assets/kuppayam/logo.png" width="180" alt="" class="visible-xs" />
|
10
10
|
</a>
|
11
11
|
<a href="#" data-toggle="settings-pane" data-animate="true">
|
12
12
|
<i class="linecons-cog"></i>
|
@@ -43,9 +43,28 @@
|
|
43
43
|
</li>
|
44
44
|
|
45
45
|
<li class="<%= nav_active?('store_manager/stock') ? 'active' : '' %>">
|
46
|
-
<%= link_to raw("<i class=\"
|
46
|
+
<%= link_to raw("<i class=\"fa-truck\"></i> <span class='title'>Manage Stock</span>"), vyapari.store_manager_stock_entries_path(@store) %>
|
47
47
|
</li>
|
48
48
|
|
49
|
+
<!-- Reports -->
|
50
|
+
<li class="<%= nav_active?('store_manager/reports') ? 'active' : '' %>">
|
51
|
+
<a href="#">
|
52
|
+
<i class="fa-list"></i>
|
53
|
+
<span class="title">Reports</span>
|
54
|
+
</a>
|
55
|
+
<ul>
|
56
|
+
<li>
|
57
|
+
<%= link_to raw("<i class=\"fa-shopping-cart\"></i> <span class='title'>Sales Report</span>"), vyapari.store_manager_sales_report_path(@store) %>
|
58
|
+
</li>
|
59
|
+
<li>
|
60
|
+
<%= link_to raw("<i class=\"fa-book\"></i> <span class='title'>Invoice Report</span>"), vyapari.store_manager_invoices_report_path(@store) %>
|
61
|
+
</li>
|
62
|
+
<!-- <li>
|
63
|
+
<%#= link_to raw("<i class=\"fa-truck\"></i> <span class='title'>Stock Report</span>"), vyapari.store_manager_stock_report_path(@store) %>
|
64
|
+
</li> -->
|
65
|
+
</ul>
|
66
|
+
</li>
|
67
|
+
|
49
68
|
<!-- Admin -->
|
50
69
|
<% if @current_user.has_role?("Site Admin") %>
|
51
70
|
<li class="<%= nav_active?('admin/dashboard') ? 'active' : '' %>">
|
@@ -53,9 +72,9 @@
|
|
53
72
|
</li>
|
54
73
|
<% end %>
|
55
74
|
|
56
|
-
<!--
|
75
|
+
<!-- Change Store -->
|
57
76
|
<li class="<%= nav_class("user/dashboard") %>">
|
58
|
-
<%= link_to raw("<i class=\"fa-desktop\"></i> <span class='title'>Change Store
|
77
|
+
<%= link_to raw("<i class=\"fa-desktop\"></i> <span class='title'>Change Store</span>"), vyapari.user_dashboard_path %>
|
59
78
|
</li>
|
60
79
|
|
61
80
|
|
@@ -5,8 +5,8 @@
|
|
5
5
|
<!-- Navbar Brand -->
|
6
6
|
<div class="navbar-brand">
|
7
7
|
<a href="dashboard-1.html" class="logo">
|
8
|
-
<img src="/assets/kuppayam/logo.png" width="
|
9
|
-
<img src="/assets/kuppayam/logo.png" width="
|
8
|
+
<img src="/assets/kuppayam/logo.png" width="180" alt="" class="hidden-xs" />
|
9
|
+
<img src="/assets/kuppayam/logo.png" width="180" alt="" class="visible-xs" />
|
10
10
|
</a>
|
11
11
|
<a href="#" data-toggle="settings-pane" data-animate="true">
|
12
12
|
<i class="linecons-cog"></i>
|
@@ -42,18 +42,21 @@
|
|
42
42
|
|
43
43
|
<%= nav_class("terminal_staff/invoices") %>
|
44
44
|
|
45
|
+
<!-- Manage Invoices -->
|
45
46
|
<li class="<%= nav_class("terminal_staff/invoices") %>">
|
46
47
|
<%= link_to raw("<i class=\"fa-book\"></i> <span class='title'>Invoices</span>"), vyapari.terminal_staff_invoices_path(@terminal) %>
|
47
48
|
</li>
|
48
49
|
|
50
|
+
<!-- Admin -->
|
49
51
|
<% if @current_user.has_role?("Site Admin") %>
|
50
52
|
<li class="<%= nav_active?('admin/dashboard') ? 'active' : '' %>">
|
51
53
|
<%= link_to raw("<i class=\"linecons-desktop\"></i> <span class='title'>Admin Dashboard</span>"), vyapari.admin_dashboard_url %>
|
52
54
|
</li>
|
53
55
|
<% end %>
|
54
56
|
|
57
|
+
<!-- Change Terminal -->
|
55
58
|
<li class="<%= nav_class("user/dashboard") %>">
|
56
|
-
<%= link_to raw("<i class=\"fa-desktop\"></i> <span class='title'>Change
|
59
|
+
<%= link_to raw("<i class=\"fa-desktop\"></i> <span class='title'>Change Terminal</span>"), vyapari.user_dashboard_path %>
|
57
60
|
</li>
|
58
61
|
|
59
62
|
</ul>
|
@@ -2,19 +2,19 @@
|
|
2
2
|
<html lang="en">
|
3
3
|
<head>
|
4
4
|
<!-- Head -->
|
5
|
-
<%= render :partial=>"
|
5
|
+
<%= render :partial=>"layouts/kuppayam/head" -%>
|
6
6
|
</head>
|
7
7
|
|
8
8
|
<body class="page-body">
|
9
9
|
|
10
|
-
<%= render :partial=>"
|
10
|
+
<%= render :partial=>"layouts/vyapari/store_manager_menu" -%>
|
11
11
|
|
12
12
|
<div class="page-container">
|
13
13
|
|
14
14
|
<div class="main-content">
|
15
15
|
|
16
16
|
<!-- Heading & Breadcrumbs -->
|
17
|
-
<%= render :partial=>"
|
17
|
+
<%= render :partial=>"layouts/kuppayam/heading" -%>
|
18
18
|
|
19
19
|
<%#* Show flash messages if controller has set any. -%>
|
20
20
|
<div id="div_flash_message" class="mt-10">
|
@@ -27,7 +27,7 @@
|
|
27
27
|
</div>
|
28
28
|
|
29
29
|
<!-- Footer -->
|
30
|
-
<%= render :partial=>"
|
30
|
+
<%= render :partial=>"layouts/kuppayam/footer" -%>
|
31
31
|
|
32
32
|
</div>
|
33
33
|
|
@@ -0,0 +1,90 @@
|
|
1
|
+
<%
|
2
|
+
|
3
|
+
total_invoice_amount = @store.invoices.dated(@date).active.sum(:net_total_amount)
|
4
|
+
|
5
|
+
total_invoices = @store.invoices.dated(@date).active.count
|
6
|
+
|
7
|
+
total_cash = @store.invoices.dated(@date).active.cash_invoices.sum(:net_total_amount)
|
8
|
+
|
9
|
+
total_cash_invoices = @store.invoices.dated(@date).active.where(payment_method: :cash).count
|
10
|
+
|
11
|
+
total_credit = @store.invoices.dated(@date).active.credit_card_invoices.sum(:net_total_amount)
|
12
|
+
|
13
|
+
total_credit_card_invoices = @store.invoices.dated(@date).active.where(payment_method: :credit_card).count
|
14
|
+
|
15
|
+
%>
|
16
|
+
|
17
|
+
<div class="row">
|
18
|
+
|
19
|
+
<div class="col-sm-3">
|
20
|
+
|
21
|
+
<div class="xe-widget xe-counter-block xe-counter-block-green" data-suffix="k" data-count=".num" data-from="0" data-to="310" data-duration="4" data-easing="false">
|
22
|
+
<div class="xe-upper">
|
23
|
+
|
24
|
+
<div class="xe-icon">
|
25
|
+
<i class="fa-money"></i>
|
26
|
+
</div>
|
27
|
+
<div class="xe-label">
|
28
|
+
<strong class="num"><%= number_to_currency total_invoice_amount, unit: "AED " %></strong>
|
29
|
+
<span>Total Sales Today</span>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
</div>
|
33
|
+
<div class="xe-lower">
|
34
|
+
<div class="border"></div>
|
35
|
+
|
36
|
+
<span>Total Invoices Today: <b><%= total_invoices %></b></span>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<div class="col-sm-3">
|
42
|
+
|
43
|
+
<div class="xe-widget xe-counter-block xe-counter-block-white" data-suffix="k" data-count=".num" data-from="0" data-to="310" data-duration="4" data-easing="false">
|
44
|
+
<div class="xe-upper">
|
45
|
+
|
46
|
+
<div class="xe-icon">
|
47
|
+
<i class="fa-money"></i>
|
48
|
+
</div>
|
49
|
+
<div class="xe-label">
|
50
|
+
<strong class="num"><%= number_to_currency total_cash, unit: "AED " %></strong>
|
51
|
+
<span>Total Cash Sales Today</span>
|
52
|
+
</div>
|
53
|
+
|
54
|
+
</div>
|
55
|
+
<div class="xe-lower">
|
56
|
+
<div class="border"></div>
|
57
|
+
|
58
|
+
<span>Total Cash Invoices Today: <b><%= total_cash_invoices %></b></span>
|
59
|
+
|
60
|
+
</div>
|
61
|
+
</div>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
<div class="col-sm-3">
|
65
|
+
|
66
|
+
<div class="xe-widget xe-counter-block xe-counter-block-white" data-suffix="k" data-count=".num" data-from="0" data-to="310" data-duration="4" data-easing="false">
|
67
|
+
<div class="xe-upper">
|
68
|
+
|
69
|
+
<div class="xe-icon">
|
70
|
+
<i class="fa-credit-card"></i>
|
71
|
+
</div>
|
72
|
+
<div class="xe-label">
|
73
|
+
<strong class="num"><%= number_to_currency total_credit, unit: "AED " %></strong>
|
74
|
+
<span>Total Credit Card Sales Today</span>
|
75
|
+
</div>
|
76
|
+
</div>
|
77
|
+
<div class="xe-lower">
|
78
|
+
<div class="border"></div>
|
79
|
+
<span>Total Credit Card Invoices Today: <b><%= total_credit_card_invoices %></b></span>
|
80
|
+
</div>
|
81
|
+
</div>
|
82
|
+
</div>
|
83
|
+
|
84
|
+
<div class="col-sm-3">
|
85
|
+
<%#= link_to raw("<i class=\"fa-book mr-10\"></i> Create Invoice"), new_terminal_staff_invoice_path(@terminal), remote: true, class: "btn btn-success btn-lg btn-block hidden-xs", style: "height:50px" %>
|
86
|
+
|
87
|
+
<%#= link_to raw("<i class=\"fa-book mr-10\"></i> Manage Invoices"), terminal_staff_invoices_path(@terminal), class: "btn btn-primary btn-only-hover btn-lg btn-block", style: "height:50px", target: "_blank" %>
|
88
|
+
</div>
|
89
|
+
|
90
|
+
</div>
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<div class="row">
|
2
|
+
|
3
|
+
<div class="col-sm-3">
|
4
|
+
<div class="xe-widget xe-counter xe-counter-info" data-count=".num" data-from="1" data-to="117" data-suffix="k" data-duration="3" data-easing="false">
|
5
|
+
<div class="xe-icon">
|
6
|
+
<i class="fa-truck"></i>
|
7
|
+
</div>
|
8
|
+
<div class="xe-label">
|
9
|
+
<strong class="num"><%= @store.total_quantity_of_products_in_stock %></strong>
|
10
|
+
<span>TOTAL QUANTITY IN STOCK</span>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div class="col-sm-3">
|
16
|
+
<div class="xe-widget xe-counter xe-counter-gray" data-count=".num" data-from="1000" data-to="2470" data-duration="4" data-easing="true">
|
17
|
+
<div class="xe-icon">
|
18
|
+
<i class="fa-bookmark"></i>
|
19
|
+
</div>
|
20
|
+
<div class="xe-label">
|
21
|
+
<strong class="num"><%= @store.total_no_of_products_in_stock %></strong>
|
22
|
+
<span>TOTAL NO OF PRODUCTS</span>
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
|
27
|
+
<div class="col-sm-3">
|
28
|
+
<div class="xe-widget xe-counter xe-counter-success" data-count=".num" data-from="0" data-to="99.9" data-suffix="%" data-duration="2">
|
29
|
+
<div class="xe-icon">
|
30
|
+
<i class="fa-shopping-cart"></i>
|
31
|
+
</div>
|
32
|
+
<div class="xe-label">
|
33
|
+
<strong class="num"><%= @store.sold_items_count(@date) %></strong>
|
34
|
+
<span>ITEMS SOLD TODAY</span>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<!-- <div class="col-sm-3">
|
40
|
+
<div class="xe-widget xe-counter xe-counter-danger" data-count=".num" data-from="1000" data-to="2470" data-duration="4" data-easing="true">
|
41
|
+
<div class="xe-icon">
|
42
|
+
<i class="fa-ban"></i>
|
43
|
+
</div>
|
44
|
+
<div class="xe-label">
|
45
|
+
<strong class="num"><%#= @store.damaged_items_count(@date) %></strong>
|
46
|
+
<span>ITEMS DAMAGED TODAY</span>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
|
51
|
+
<div class="col-sm-3">
|
52
|
+
<div class="xe-widget xe-counter xe-counter-gray" data-count=".num" data-from="1000" data-to="2470" data-duration="4" data-easing="true">
|
53
|
+
<div class="xe-icon">
|
54
|
+
<i class="fa-bookmark"></i>
|
55
|
+
</div>
|
56
|
+
<div class="xe-label">
|
57
|
+
<strong class="num"><%#= @store.reserved_items_count(@date) %></strong>
|
58
|
+
<span>RESERVED</span>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
</div> -->
|
62
|
+
|
63
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
<div class="row">
|
4
|
+
|
5
|
+
<% @store.terminals.each do |terminal| %>
|
6
|
+
<div class="col-sm-3">
|
7
|
+
|
8
|
+
<div class="xe-widget xe-vertical-counter xe-vertical-counter-primary" data-count=".num" data-from="0" data-to="442" data-suffix=" TB" data-duration="5">
|
9
|
+
<div class="xe-icon">
|
10
|
+
<i class="fa-desktop"></i>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<div class="xe-label">
|
14
|
+
<strong class="num"><%= terminal.code %></strong>
|
15
|
+
<span><%= terminal.name %></span>
|
16
|
+
<span><%= link_to "Log In", terminal_staff_dashboard_path(terminal), class: "btn btn-primary btn-white btn-block mt-20" %></span>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
</div>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
</div>
|
@@ -1,92 +1,64 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<%= @store.total_no_of_products_in_stock %> <span style="font-size:20px">Products</span>
|
12
|
-
</div>
|
13
|
-
<div class="chart-item-desc">
|
14
|
-
<%= link_to raw("<i class=\"fa-truck mr-10\"></i> View Stock"), store_manager_stock_entries_path(@store), class: "btn btn-success btn-lg btn-block", style: "height:50px" %>
|
15
|
-
<%= link_to raw("<i class=\"fa-upload mr-10\"></i> Import Stock"), store_manager_stock_bundles_path(@store), class: "btn btn-success btn-lg btn-block", style: "height:50px" %>
|
1
|
+
<div class="row calendar-env">
|
2
|
+
<div class="col-md-12 text-center">
|
3
|
+
<div class="btn-group" style="margin:auto;">
|
4
|
+
|
5
|
+
<%= link_to raw("<i class=\"fa fa-arrow-left\"></i>"), store_manager_dashboard_path(@store, date: (@date - 1.day)), class: "btn btn-white", style: "font-size: 20px;" %>
|
6
|
+
|
7
|
+
<input type="text" name="reportdate" value="<%= @date.strftime("%m-%d-%Y") %>" class="btn btn-white" style="height:42px;" />
|
8
|
+
|
9
|
+
<%= link_to raw("<i class=\"fa fa-arrow-right\"></i>"), store_manager_dashboard_path(@store, date: (@date + 1.day)), class: "btn btn-white", style: "font-size: 20px;" %>
|
10
|
+
</div>
|
16
11
|
</div>
|
17
12
|
</div>
|
18
13
|
|
19
|
-
<
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
<div class="xe-label">
|
27
|
-
<strong class="num"><%= @store.in_stock_items_count_as_of_now %></strong>
|
28
|
-
<span>TOTAL QUANTITY IN STOCK</span>
|
29
|
-
</div>
|
30
|
-
</div>
|
14
|
+
<script type="text/javascript">
|
15
|
+
$(function() {
|
16
|
+
|
17
|
+
$('input[name="reportdate"]').daterangepicker({
|
18
|
+
singleDatePicker: true,
|
19
|
+
showDropdowns: true
|
20
|
+
},
|
31
21
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
</div>
|
22
|
+
function(start, end, label) {
|
23
|
+
var urlWithoutParams = location.protocol + '//' + location.host + location.pathname;
|
24
|
+
var params = { locale:'en', date:start.format('DD-MM-YYYY') };
|
25
|
+
var dateParam = jQuery.param(params);
|
26
|
+
window.location.href = urlWithoutParams + "?" + dateParam;
|
27
|
+
});
|
28
|
+
});
|
29
|
+
</script>
|
41
30
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
<strong class="num"><%= @store.damaged_items_count_for_today %></strong>
|
48
|
-
<span>ITEMS DAMAGED TODAY</span>
|
49
|
-
</div>
|
50
|
-
</div>
|
31
|
+
<div class="row mt-40 mb-40">
|
32
|
+
<div class="col-sm-12">
|
33
|
+
<h3>Sales Summary</h3>
|
34
|
+
</div>
|
35
|
+
</div>
|
51
36
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
</div>
|
56
|
-
<div class="xe-label">
|
57
|
-
<strong class="num"><%= @store.reserved_items_count_for_today %></strong>
|
58
|
-
<span>RESERVED</span>
|
59
|
-
</div>
|
60
|
-
</div>
|
37
|
+
<div id="div_store_dashboard_sales_counts">
|
38
|
+
<%= render :partial=>"vyapari/store_manager/dashboard/sales_counts" -%>
|
39
|
+
</div>
|
61
40
|
|
41
|
+
<div class="row mt-40 mb-40">
|
42
|
+
<div class="col-sm-6">
|
43
|
+
<h3>Stock Summary</h3>
|
44
|
+
</div>
|
45
|
+
<div class="col-sm-6">
|
46
|
+
<%= link_to raw("<i class=\"fa-truck mr-10\"></i> View Stock"), store_manager_stock_entries_path(@store), class: "btn btn-primary pull-right ml-10 mt-20" %>
|
47
|
+
<%= link_to raw("<i class=\"fa-upload mr-10\"></i> Import Stock"), store_manager_stock_bundles_path(@store), class: "btn btn-secondary pull-right mt-20" %>
|
62
48
|
</div>
|
49
|
+
</div>
|
63
50
|
|
64
|
-
<div class="col-sm-9">
|
65
51
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<thead>
|
70
|
-
<tr>
|
71
|
-
<th style="width:60%">Name</th>
|
72
|
-
<th>Code</th>
|
73
|
-
<th style="text-align:center">Actions</th>
|
74
|
-
</tr>
|
75
|
-
</thead>
|
76
|
-
<tbody>
|
77
|
-
<% @store.terminals.each do |terminal| %>
|
78
|
-
<tr>
|
79
|
-
<td><%= terminal.name %></td>
|
80
|
-
<td><%= terminal.code %></td>
|
81
|
-
<td style="text-align:center">
|
82
|
-
<%= link_to "Log In", terminal_staff_dashboard_path(terminal), class: "btn btn-primary btn-success pr-30 pl-30" %>
|
83
|
-
</td>
|
84
|
-
</tr>
|
85
|
-
<% end %>
|
86
|
-
</tbody>
|
87
|
-
</table>
|
88
|
-
</div>
|
52
|
+
<div id="div_store_dashboard_stock_counts">
|
53
|
+
<%= render :partial=>"vyapari/store_manager/dashboard/stock_counts" -%>
|
54
|
+
</div>
|
89
55
|
|
56
|
+
<div class="row mt-40 mb-40">
|
57
|
+
<div class="col-sm-12">
|
58
|
+
<h3>Terminals</h3>
|
90
59
|
</div>
|
91
|
-
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<div id="div_store_dashboard_terminals" class="mb-100">
|
63
|
+
<%= render :partial=>"vyapari/store_manager/dashboard/terminals" -%>
|
92
64
|
</div>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
<div class="table-responsive table-scrollable">
|
2
|
+
<table class="table table-striped table-condensed table-bordered">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<% @columns.each do |col_item| %>
|
6
|
+
<% next unless @selected_columns.include?(col_item[:column_name]) %>
|
7
|
+
<th style="text-align: center;"><%= col_item[:display_name] %></th>
|
8
|
+
<% end %>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
|
13
|
+
<% cols_except_id = @columns.reject{|item| item[:column_name] == :id}.select{|item| @selected_columns.include?(item[:column_name]) } %>
|
14
|
+
|
15
|
+
<% @results.each_with_index do |result, i| %>
|
16
|
+
<tr>
|
17
|
+
<th scope="row" style="text-align: center;"><%= i + 1 %></th>
|
18
|
+
|
19
|
+
<% cols_except_id.each do |col_item| %>
|
20
|
+
|
21
|
+
<% case col_item[:column_type] %>
|
22
|
+
<% when :string, :integer %>
|
23
|
+
<td style="text-align: <%= col_item[:align] %>;">
|
24
|
+
<%= result.send(col_item[:column_name]) %>
|
25
|
+
</td>
|
26
|
+
<% when :status %>
|
27
|
+
<td style="text-align: <%= col_item[:align] %>;">
|
28
|
+
<%= result.send(col_item[:column_name]).titleize %>
|
29
|
+
</td>
|
30
|
+
<% when :currency %>
|
31
|
+
<td style="text-align: <%= col_item[:align] %>;">
|
32
|
+
<%= number_to_currency(result.send(col_item[:column_name]), unit: "") %>
|
33
|
+
</td>
|
34
|
+
<% when :date %>
|
35
|
+
<td style="text-align: <%= col_item[:align] %>;"><%= result.send(col_item[:column_name]).strftime("%d-%m-%Y") %>
|
36
|
+
</td>
|
37
|
+
<% else %>
|
38
|
+
<td style="text-align: <%= col_item[:align] %>;"><%= result.send(col_item[:column_name]) %>
|
39
|
+
</td>
|
40
|
+
<% end %>
|
41
|
+
|
42
|
+
<% end %>
|
43
|
+
|
44
|
+
</tr>
|
45
|
+
<% end %>
|
46
|
+
|
47
|
+
</tbody>
|
48
|
+
|
49
|
+
<tfoot>
|
50
|
+
<% if @total && @total.first && @total.first.net_total_amount %>
|
51
|
+
<tr>
|
52
|
+
<td></td>
|
53
|
+
<% cols_except_id.each do |col_item| %>
|
54
|
+
<% if col_item[:column_name] == :net_total_amount %>
|
55
|
+
<td style="font-weight: bold;text-align: <%= col_item[:align] %>;"><%= number_to_currency @total.first.net_total_amount.to_s, unit: "AED " %></td>
|
56
|
+
<% else %>
|
57
|
+
<td></td>
|
58
|
+
<% end %>
|
59
|
+
<% end %>
|
60
|
+
</tr>
|
61
|
+
<% end %>
|
62
|
+
</tfoot>
|
63
|
+
|
64
|
+
</table>
|
65
|
+
</div>
|