From 75dd4db10f2b17731f4e7740fe2f98431c72b629 Mon Sep 17 00:00:00 2001
From: Aung Myo
Date: Mon, 26 Jun 2017 19:33:29 +0630
Subject: [PATCH 01/18] update seed
---
db/seeds.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/db/seeds.rb b/db/seeds.rb
index 21268860..d5b35629 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -63,6 +63,7 @@ employee_roles = Lookup.create([{lookup_type:'employee_roles', name: 'Cashier',
{lookup_type:'employee_roles', name: 'Waiter', value: 'waiter'},
{lookup_type:'employee_roles', name: 'Supervisour', value: 'supervisour'},
{lookup_type:'employee_roles', name: 'Manager', value: 'manager'},
+ {lookup_type:'employee_roles', name: 'Accountant', value: 'account'},
{lookup_type:'employee_roles', name: 'Administrator', value: 'administrator'}])
#booking_status
From 0726af072e577d4c8290167280356009218b081c Mon Sep 17 00:00:00 2001
From: Aung Myo
Date: Mon, 26 Jun 2017 19:49:02 +0630
Subject: [PATCH 02/18] update cancan
---
.../reports/daily_sales_controller.rb | 2 +-
.../reports/sale_items_controller.rb | 2 +-
app/models/ability.rb | 27 ++++++++++++++++---
3 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/app/controllers/reports/daily_sales_controller.rb b/app/controllers/reports/daily_sales_controller.rb
index 6d99551d..1a878aaa 100644
--- a/app/controllers/reports/daily_sales_controller.rb
+++ b/app/controllers/reports/daily_sales_controller.rb
@@ -1,5 +1,5 @@
class Reports::DailySalesController < BaseReportController
- # authorize_resource :class => false
+ authorize_resource :class => false
def index
from, to ,report_type = get_date_range_from_params
@sale_data = Sale.daily_sales_list(from,to)
diff --git a/app/controllers/reports/sale_items_controller.rb b/app/controllers/reports/sale_items_controller.rb
index 81f7af01..9001658c 100644
--- a/app/controllers/reports/sale_items_controller.rb
+++ b/app/controllers/reports/sale_items_controller.rb
@@ -1,5 +1,5 @@
class Reports::SaleItemsController < BaseReportController
- # authorize_resource :class => false
+ authorize_resource :class => false
def index
from, to, report_type = get_date_range_from_params
diff --git a/app/models/ability.rb b/app/models/ability.rb
index f3e8da5c..10a289f1 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -20,9 +20,9 @@ class Ability
can :manage, Zone
can :manage, CashierTerminal
can :manage, Employee
- can :manage, MembershipSetting
- can :manage, MembershipAction
- can :manage, PaymentMethodSetting
+ # can :manage, MembershipSetting
+ # can :manage, MembershipAction
+ # can :manage, PaymentMethodSetting
can :manage, TaxProfile
can :manage, PrintSetting
can :manage, Account
@@ -30,9 +30,26 @@ class Ability
can :manage, Order
can :manage, Sale
+ can :manage, Customer
+
can :index, :dailysale
can :index, :saleitem
+ can :add_customer, Customer
+ can :update_sale_by_customer, Customer
+
+ can :index, :discount
+ can :create, :discount
+
+ can :show, :payment
+ can :create, :payment
+ can :reprint, :payment
+
+ can :move_dining, :movetable
+ can :moving, :movetable
+
+ can :move_dining, :moveroom
+
elsif user.role == "cashier"
can :read, Order
@@ -55,6 +72,10 @@ class Ability
can :moving, :movetable
can :move_dining, :moveroom
+
+ can :index, :dailysale
+ can :index, :saleitem
+
elsif user.role == "accountant"
From 4c13be257b1aa09b0dd960915e30e2d523f9d3cc Mon Sep 17 00:00:00 2001
From: Aung Myo
Date: Mon, 26 Jun 2017 22:45:34 +0630
Subject: [PATCH 03/18] update authroize
---
.../{dailysales.coffee => dailysale.coffee} | 0
.../{sale_items.coffee => saleitem.coffee} | 0
.../{dailysales.scss => dailysale.scss} | 2 +-
.../{sale_items.scss => saleitem.scss} | 2 +-
.../reports/bksale_items_controller.rb | 19 --
.../reports/daily_sales_controller.rb | 17 --
..._controller.rb => dailysale_controller.rb} | 8 +-
.../reports/receipt_no_controller.rb | 2 +-
...s_controller.rb => saleitem_controller.rb} | 6 +-
app/helpers/reports/dailysale_helper.rb | 2 +
app/helpers/reports/dailysales_helper.rb | 2 -
app/helpers/reports/sale_items_helper.rb | 2 -
app/helpers/reports/saleitem_helper.rb | 2 +
app/models/ability.rb | 26 +--
app/views/layouts/_header.html.erb | 4 +-
.../_shift_sale_report_filter.html.erb | 151 --------------
app/views/reports/daily_sales/index.html.erb | 190 ------------------
app/views/reports/daily_sales/index.xls.erb | 116 -----------
.../_shift_sale_report_filter.html.erb | 0
.../{daily_sale => dailysale}/index.html.erb | 4 +-
.../{daily_sale => dailysale}/index.xls.erb | 0
.../_shift_sale_report_filter.html.erb | 156 --------------
app/views/reports/sale_items/index.html.erb | 141 -------------
app/views/reports/sale_items/index.xls.erb | 136 -------------
.../_shift_sale_report_filter.html.erb | 0
.../{sale_item => saleitem}/index.html.erb | 4 +-
.../{sale_item => saleitem}/index.xls.erb | 0
config/routes.rb | 4 +-
.../reports/dailysale_controller_spec.rb | 5 +
.../reports/dailysales_controller_spec.rb | 5 -
.../reports/sale_items_controller_spec.rb | 5 -
.../reports/saleitem_controller_spec.rb | 5 +
...elper_spec.rb => dailysale_helper_spec.rb} | 6 +-
...helper_spec.rb => saleitem_helper_spec.rb} | 6 +-
34 files changed, 52 insertions(+), 976 deletions(-)
rename app/assets/javascripts/reports/{dailysales.coffee => dailysale.coffee} (100%)
rename app/assets/javascripts/reports/{sale_items.coffee => saleitem.coffee} (100%)
rename app/assets/stylesheets/reports/{dailysales.scss => dailysale.scss} (60%)
rename app/assets/stylesheets/reports/{sale_items.scss => saleitem.scss} (60%)
delete mode 100644 app/controllers/reports/bksale_items_controller.rb
delete mode 100644 app/controllers/reports/daily_sales_controller.rb
rename app/controllers/reports/{daily_salesbk_controller.rb => dailysale_controller.rb} (70%)
rename app/controllers/reports/{sale_items_controller.rb => saleitem_controller.rb} (73%)
create mode 100644 app/helpers/reports/dailysale_helper.rb
delete mode 100644 app/helpers/reports/dailysales_helper.rb
delete mode 100644 app/helpers/reports/sale_items_helper.rb
create mode 100644 app/helpers/reports/saleitem_helper.rb
delete mode 100644 app/views/reports/daily_sales/_shift_sale_report_filter.html.erb
delete mode 100644 app/views/reports/daily_sales/index.html.erb
delete mode 100644 app/views/reports/daily_sales/index.xls.erb
rename app/views/reports/{daily_sale => dailysale}/_shift_sale_report_filter.html.erb (100%)
rename app/views/reports/{daily_sale => dailysale}/index.html.erb (97%)
rename app/views/reports/{daily_sale => dailysale}/index.xls.erb (100%)
delete mode 100644 app/views/reports/sale_items/_shift_sale_report_filter.html.erb
delete mode 100644 app/views/reports/sale_items/index.html.erb
delete mode 100644 app/views/reports/sale_items/index.xls.erb
rename app/views/reports/{sale_item => saleitem}/_shift_sale_report_filter.html.erb (100%)
rename app/views/reports/{sale_item => saleitem}/index.html.erb (95%)
rename app/views/reports/{sale_item => saleitem}/index.xls.erb (100%)
create mode 100644 spec/controllers/reports/dailysale_controller_spec.rb
delete mode 100644 spec/controllers/reports/dailysales_controller_spec.rb
delete mode 100644 spec/controllers/reports/sale_items_controller_spec.rb
create mode 100644 spec/controllers/reports/saleitem_controller_spec.rb
rename spec/helpers/reports/{sale_items_helper_spec.rb => dailysale_helper_spec.rb} (69%)
rename spec/helpers/reports/{dailysales_helper_spec.rb => saleitem_helper_spec.rb} (69%)
diff --git a/app/assets/javascripts/reports/dailysales.coffee b/app/assets/javascripts/reports/dailysale.coffee
similarity index 100%
rename from app/assets/javascripts/reports/dailysales.coffee
rename to app/assets/javascripts/reports/dailysale.coffee
diff --git a/app/assets/javascripts/reports/sale_items.coffee b/app/assets/javascripts/reports/saleitem.coffee
similarity index 100%
rename from app/assets/javascripts/reports/sale_items.coffee
rename to app/assets/javascripts/reports/saleitem.coffee
diff --git a/app/assets/stylesheets/reports/dailysales.scss b/app/assets/stylesheets/reports/dailysale.scss
similarity index 60%
rename from app/assets/stylesheets/reports/dailysales.scss
rename to app/assets/stylesheets/reports/dailysale.scss
index cfc48374..516e1b52 100644
--- a/app/assets/stylesheets/reports/dailysales.scss
+++ b/app/assets/stylesheets/reports/dailysale.scss
@@ -1,3 +1,3 @@
-// Place all the styles related to the reports/dailysales controller here.
+// Place all the styles related to the reports/dailysale controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/assets/stylesheets/reports/sale_items.scss b/app/assets/stylesheets/reports/saleitem.scss
similarity index 60%
rename from app/assets/stylesheets/reports/sale_items.scss
rename to app/assets/stylesheets/reports/saleitem.scss
index b9692327..3e3460a4 100644
--- a/app/assets/stylesheets/reports/sale_items.scss
+++ b/app/assets/stylesheets/reports/saleitem.scss
@@ -1,3 +1,3 @@
-// Place all the styles related to the reports/sale_items controller here.
+// Place all the styles related to the reports/saleitem controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/controllers/reports/bksale_items_controller.rb b/app/controllers/reports/bksale_items_controller.rb
deleted file mode 100644
index 1f349320..00000000
--- a/app/controllers/reports/bksale_items_controller.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class Reports::SaleItemsController < BaseReportController
- authorize_resource :class => false
- def index
-
- from, to, report_type = get_date_range_from_params
-
- @sale_data = Sale.get_by_range_by_saleitems(from,to,Sale::SALE_STATUS_COMPLETED,report_type)
-
- respond_to do |format|
- format.html
- format.xls
- end
- end
-
- def show
-
- end
-
-end
\ No newline at end of file
diff --git a/app/controllers/reports/daily_sales_controller.rb b/app/controllers/reports/daily_sales_controller.rb
deleted file mode 100644
index 1a878aaa..00000000
--- a/app/controllers/reports/daily_sales_controller.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-class Reports::DailySalesController < BaseReportController
- authorize_resource :class => false
- def index
- from, to ,report_type = get_date_range_from_params
- @sale_data = Sale.daily_sales_list(from,to)
- @tax = SaleTax.get_tax(from,to)
- respond_to do |format|
- format.html
- format.xls
- end
- end
-
- def show
-
- end
-
-end
\ No newline at end of file
diff --git a/app/controllers/reports/daily_salesbk_controller.rb b/app/controllers/reports/dailysale_controller.rb
similarity index 70%
rename from app/controllers/reports/daily_salesbk_controller.rb
rename to app/controllers/reports/dailysale_controller.rb
index 1a878aaa..27e812ab 100644
--- a/app/controllers/reports/daily_salesbk_controller.rb
+++ b/app/controllers/reports/dailysale_controller.rb
@@ -1,5 +1,6 @@
-class Reports::DailySalesController < BaseReportController
- authorize_resource :class => false
+class Reports::DailysaleController < BaseReportController
+ authorize_resource :class => false
+
def index
from, to ,report_type = get_date_range_from_params
@sale_data = Sale.daily_sales_list(from,to)
@@ -13,5 +14,4 @@ class Reports::DailySalesController < BaseReportController
def show
end
-
-end
\ No newline at end of file
+end
diff --git a/app/controllers/reports/receipt_no_controller.rb b/app/controllers/reports/receipt_no_controller.rb
index d85c7d57..e4157c4e 100644
--- a/app/controllers/reports/receipt_no_controller.rb
+++ b/app/controllers/reports/receipt_no_controller.rb
@@ -1,5 +1,5 @@
class Reports::ReceiptNoController < BaseReportController
-
+authorize_resource :class => false
def index
from, to = get_date_range_from_params
puts "from..."
diff --git a/app/controllers/reports/sale_items_controller.rb b/app/controllers/reports/saleitem_controller.rb
similarity index 73%
rename from app/controllers/reports/sale_items_controller.rb
rename to app/controllers/reports/saleitem_controller.rb
index 9001658c..0f91681d 100644
--- a/app/controllers/reports/sale_items_controller.rb
+++ b/app/controllers/reports/saleitem_controller.rb
@@ -1,5 +1,5 @@
-class Reports::SaleItemsController < BaseReportController
- authorize_resource :class => false
+class Reports::SaleitemController < BaseReportController
+ authorize_resource :class => false
def index
from, to, report_type = get_date_range_from_params
@@ -16,4 +16,4 @@ class Reports::SaleItemsController < BaseReportController
end
-end
\ No newline at end of file
+end
diff --git a/app/helpers/reports/dailysale_helper.rb b/app/helpers/reports/dailysale_helper.rb
new file mode 100644
index 00000000..88ccfd83
--- /dev/null
+++ b/app/helpers/reports/dailysale_helper.rb
@@ -0,0 +1,2 @@
+module Reports::DailysaleHelper
+end
diff --git a/app/helpers/reports/dailysales_helper.rb b/app/helpers/reports/dailysales_helper.rb
deleted file mode 100644
index 94e34c27..00000000
--- a/app/helpers/reports/dailysales_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module Reports::DailysalesHelper
-end
diff --git a/app/helpers/reports/sale_items_helper.rb b/app/helpers/reports/sale_items_helper.rb
deleted file mode 100644
index 63e884d7..00000000
--- a/app/helpers/reports/sale_items_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module Reports::SaleItemsHelper
-end
diff --git a/app/helpers/reports/saleitem_helper.rb b/app/helpers/reports/saleitem_helper.rb
new file mode 100644
index 00000000..47544cf9
--- /dev/null
+++ b/app/helpers/reports/saleitem_helper.rb
@@ -0,0 +1,2 @@
+module Reports::SaleitemHelper
+end
diff --git a/app/models/ability.rb b/app/models/ability.rb
index 10a289f1..2876c902 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -32,9 +32,6 @@ class Ability
can :manage, Customer
- can :index, :dailysale
- can :index, :saleitem
-
can :add_customer, Customer
can :update_sale_by_customer, Customer
@@ -50,6 +47,10 @@ class Ability
can :move_dining, :moveroom
+ can :index, :dailysale
+ can :index, :saleitem
+ can :index, :receipt_no
+
elsif user.role == "cashier"
can :read, Order
@@ -72,20 +73,21 @@ class Ability
can :moving, :movetable
can :move_dining, :moveroom
-
- can :index, :dailysale
- can :index, :saleitem
-
elsif user.role == "accountant"
can :index, :dailysale
- can :index, :saleitem
- can :index, :receiptno
- can :show, :dailysale
- can :show, :saleitem
- can :show, :receiptno
+ can :manage, :saleitem
+ can :index, :receiptno
+
+ elsif user.role == "supervisour"
+
+ can :index, :dailysale
+ can :manage, :saleitem
+ can :index, :receiptno
end
+
end
+
end
diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb
index 24211081..4bf44234 100644
--- a/app/views/layouts/_header.html.erb
+++ b/app/views/layouts/_header.html.erb
@@ -38,8 +38,8 @@
Reports
diff --git a/app/views/reports/daily_sales/_shift_sale_report_filter.html.erb b/app/views/reports/daily_sales/_shift_sale_report_filter.html.erb
deleted file mode 100644
index 3a5d788c..00000000
--- a/app/views/reports/daily_sales/_shift_sale_report_filter.html.erb
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
- <%= form_tag report_path, :method => :get, :id=>"frm_report", :class => "form" do %>
- <% if period_type != false %>
-
-
- Select Period
-
- Today
- Yesterday
- This week
- Last week
- Last 7 days
- This month
- Last month
- Last 30 days
- This year
- Last year
-
-
-
-
-
-
- From
-
-
-
- To
-
-
-
-
-
-
- <% end %>
-
-
-
-
-
- <% if defined? promotions %>
- <%= select_tag "promotion", options_for_select(@promotions, :selected => params[:promotion_type]), :class => "form-control" %>
- <% end %>
-
- <% if defined? menu_types %>
- <%= select_tag "menu_type", options_for_select(@menu_types, :selected => params[:menu_type]), :class => "form-control" %>
- <% end %>
-
- <% if defined? payments %>
- <%= select_tag "payment_type", options_for_select(@payments, :selected => params[:payment_type]), :class => "form-control" %>
- <% end %>
-
- <% if defined? shift_name %>
-
- <% end %>
-
- <% if defined? cashiers %>
- <%= select_tag "cashier", options_from_collection_for_select(@cashiers,"id","name"),:prompt => "All Cashier Stations", :class => "form-control" %>
- <% end %>
-
- <% if defined? singer %>
- <%= select_tag "singer", options_from_collection_for_select(singer,"id","name"),:prompt => "All Vocal List", :class => "form-control" %>
- <% end %>
-
- <% if defined? bsm %>
- <%= select_tag "singer", options_from_collection_for_select(bsm,"id","name"),:prompt => "All BSM List", :class => "form-control" %>
- <% end %>
-
- <% if defined? guest_role %>
- <%= select_tag "guest_role", options_from_collection_for_select(@guest_role,"id","name"),:prompt => "Vocal/BSM List", :class => "form-control" %>
- <% end %>
-
- <% if defined? list_by_payment_type %>
- <%= select_tag "payment_type_list", options_for_select(@payment_list, :selected => params[:payment_type_list]), :class => "form-control" %>
- <% end %>
-
- <% if defined? products %>
- <%= select_tag "product", options_from_collection_for_select(@products,"id","name"),:prompt => "All Products", :class => "form-control" %>
- <% end %>
-
- <% if defined? items %>
- <%= select_tag "item", options_for_select(@items, :selected => params[:item_type]), :class => "form-control" %>
- <% end %>
-
-
-
-
-
- <% end %>
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/views/reports/daily_sales/index.html.erb b/app/views/reports/daily_sales/index.html.erb
deleted file mode 100644
index 7c2a8c61..00000000
--- a/app/views/reports/daily_sales/index.html.erb
+++ /dev/null
@@ -1,190 +0,0 @@
-
-
-
- <%= render :partial=>'shift_sale_report_filter',
- :locals=>{ :period_type => true, :shift_name => false, :report_path =>reports_daily_sales_path} %>
-
-
-
-
-
-
-
-
-
-
- <% if params[:from]%>
-
- Sale (<%= params[:from] rescue '-' %> - <%= params[:to] rescue '-'%>)
-
- <% end %>
-
- Sr.no
- Date
- Void Amount
- Mpu Sales
- Master Sales
- Visa Sales
- Jcb Sales
- Paypar Sales
- Cash Sales
- Credit Sales
- FOC Sales
- (Discount)
- Grand Total + Rounding Adj.
- Rounding Adj.
- Grand Total
-
-
- <% unless @sale_data.empty? %>
-
-
- <% void = 0 %>
- <% mpu = 0 %>
- <% master = 0 %>
- <% visa = 0 %>
- <% jcb = 0 %>
- <% paypar = 0 %>
- <% cash = 0 %>
- <% credit = 0 %>
- <% foc = 0 %>
- <% discount = 0 %>
- <% total = 0 %>
- <% grand_total = 0 %>
- <% count = 1 %> <% rounding_adj = 0 %>
- <% @sale_data.each do |sale| %>
- <% void += sale[:void_amount] %>
- <% mpu += sale[:mpu_amount] %>
- <% master += sale[:master_amount] %>
- <% visa += sale[:visa_amount] %>
- <% jcb += sale[:jcb_amount] %>
- <% paypar += sale[:paypar_amount] %>
- <% cash += sale[:cash_amount] %>
- <% credit += sale[:credit_amount] %>
- <% foc += sale[:foc_amount] %>
- <% discount += sale[:total_discount] %>
- <% total += sale[:grand_total].to_f + sale[:rounding_adj].to_f %>
- <% grand_total += sale[:grand_total].to_f %>
- <% rounding_adj += sale[:rounding_adj].to_f %>
-
- <%= count %>
- <%= sale[:sale_date].strftime("#{sale[:sale_date].day.ordinalize} %b") rescue '-' %>
- <%= number_with_delimiter(sprintf("%.2f",sale[:void_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:mpu_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:master_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:visa_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:jcb_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:paypar_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:cash_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:credit_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:foc_amount]), :delimiter => ',') rescue '-'%>
- (<%= number_with_delimiter(sprintf("%.2f",sale[:total_discount]), :delimiter => ',') rescue '-'%>)
- <%= number_with_delimiter(sprintf("%.2f",sale[:grand_total].to_f + sale[:rounding_adj].to_f ), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:rounding_adj].to_f), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:grand_total]), :delimiter => ',') rescue '-'%>
-
- <% count = count + 1 %>
- <% end %>
-
-
- Total
- <%= number_with_delimiter(sprintf("%.2f",mpu_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",master_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",visa_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",jcb_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",paypar_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",cash), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",credit), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",foc), :delimiter => ',') rescue '-'%>
- (<%= number_with_delimiter(sprintf("%.2f",discount), :delimiter => ',') rescue '-'%>)
- <%= number_with_delimiter(sprintf("%.2f",total), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",rounding_adj), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",grand_total), :delimiter => ',') rescue '-'%>
-
-
- <% total_tax = 0 %>
- <% unless @tax.empty? %>
- <% @tax.each do |tax| %>
- <% total_tax += tax.tax_amount.to_f %>
-
- <%= tax.tax_name rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",tax.tax_amount), :delimiter => ',') rescue '-'%>
-
-
-
- <% end %>
- <% net = total - total_tax %>
-
- Net Amount
- <%= number_with_delimiter(sprintf("%.2f",net), :delimiter => ',') rescue '-'%>
-
-
- <% end %>
-
- <% end %>
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/views/reports/daily_sales/index.xls.erb b/app/views/reports/daily_sales/index.xls.erb
deleted file mode 100644
index 67e76e3c..00000000
--- a/app/views/reports/daily_sales/index.xls.erb
+++ /dev/null
@@ -1,116 +0,0 @@
-
-
-
-
- <% if params[:from]%>
-
- Sale (<%= params[:from] rescue '-' %> - <%= params[:to] rescue '-'%>)
-
- <% end %>
-
- Sr.no
- Date
- Void Amount
- Mpu Sales
- Master Sales
- Visa Sales
- Jcb Sales
- Paypar Sales
- Cash Sales
- Credit Sales
- FOC Sales
- (Discount)
- Grand Total + Rounding Adj.
- Rounding Adj.
- Grand Total
-
-
- <% unless @sale_data.empty? %>
-
-
- <% void = 0 %>
- <% mpu = 0 %>
- <% master = 0 %>
- <% visa = 0 %>
- <% jcb = 0 %>
- <% paypar = 0 %>
- <% cash = 0 %>
- <% credit = 0 %>
- <% foc = 0 %>
- <% discount = 0 %>
- <% total = 0 %>
- <% grand_total = 0 %>
- <% count = 1 %> <% rounding_adj = 0 %>
- <% @sale_data.each do |sale| %>
- <% void += sale[:void_amount] %>
- <% mpu += sale[:mpu_amount] %>
- <% master += sale[:master_amount] %>
- <% visa += sale[:visa_amount] %>
- <% jcb += sale[:jcb_amount] %>
- <% paypar += sale[:paypar_amount] %>
- <% cash += sale[:cash_amount] %>
- <% credit += sale[:credit_amount] %>
- <% foc += sale[:foc_amount] %>
- <% discount += sale[:total_discount] %>
- <% total += sale[:grand_total].to_f + sale[:rounding_adj].to_f %>
- <% grand_total += sale[:grand_total].to_f %>
- <% rounding_adj += sale[:rounding_adj].to_f %>
-
- <%= count %>
- <%= sale[:sale_date].strftime("#{sale[:sale_date].day.ordinalize} %b") rescue '-' %>
- <%= number_with_delimiter(sprintf("%.2f",sale[:void_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:mpu_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:master_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:visa_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:jcb_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:paypar_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:cash_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:credit_amount]), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:foc_amount]), :delimiter => ',') rescue '-'%>
- (<%= number_with_delimiter(sprintf("%.2f",sale[:total_discount]), :delimiter => ',') rescue '-'%>)
- <%= number_with_delimiter(sprintf("%.2f",sale[:grand_total].to_f + sale[:rounding_adj].to_f ), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:rounding_adj].to_f), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",sale[:grand_total]), :delimiter => ',') rescue '-'%>
-
- <% count = count + 1 %>
- <% end %>
-
-
- Total
- <%= number_with_delimiter(sprintf("%.2f",mpu_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",master_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",visa_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",jcb_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",paypar_amount), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",cash), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",credit), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",foc), :delimiter => ',') rescue '-'%>
- (<%= number_with_delimiter(sprintf("%.2f",discount), :delimiter => ',') rescue '-'%>)
- <%= number_with_delimiter(sprintf("%.2f",total), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",rounding_adj), :delimiter => ',') rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",grand_total), :delimiter => ',') rescue '-'%>
-
-
- <% total_tax = 0 %>
- <% unless @tax.empty? %>
- <% @tax.each do |tax| %>
- <% total_tax += tax.tax_amount.to_f %>
-
- <%= tax.tax_name rescue '-'%>
- <%= number_with_delimiter(sprintf("%.2f",tax.tax_amount), :delimiter => ',') rescue '-'%>
-
-
-
- <% end %>
- <% net = total - total_tax %>
-
- Net Amount
- <%= number_with_delimiter(sprintf("%.2f",net), :delimiter => ',') rescue '-'%>
-
-
- <% end %>
-
- <% end %>
-
-
-
\ No newline at end of file
diff --git a/app/views/reports/daily_sale/_shift_sale_report_filter.html.erb b/app/views/reports/dailysale/_shift_sale_report_filter.html.erb
similarity index 100%
rename from app/views/reports/daily_sale/_shift_sale_report_filter.html.erb
rename to app/views/reports/dailysale/_shift_sale_report_filter.html.erb
diff --git a/app/views/reports/daily_sale/index.html.erb b/app/views/reports/dailysale/index.html.erb
similarity index 97%
rename from app/views/reports/daily_sale/index.html.erb
rename to app/views/reports/dailysale/index.html.erb
index 7c2a8c61..e151878e 100644
--- a/app/views/reports/daily_sale/index.html.erb
+++ b/app/views/reports/dailysale/index.html.erb
@@ -7,14 +7,14 @@
<%= render :partial=>'shift_sale_report_filter',
- :locals=>{ :period_type => true, :shift_name => false, :report_path =>reports_daily_sales_path} %>
+ :locals=>{ :period_type => true, :shift_name => false, :report_path =>reports_dailysale_index_path} %>
diff --git a/app/views/reports/daily_sale/index.xls.erb b/app/views/reports/dailysale/index.xls.erb
similarity index 100%
rename from app/views/reports/daily_sale/index.xls.erb
rename to app/views/reports/dailysale/index.xls.erb
diff --git a/app/views/reports/sale_items/_shift_sale_report_filter.html.erb b/app/views/reports/sale_items/_shift_sale_report_filter.html.erb
deleted file mode 100644
index 7f95b6b9..00000000
--- a/app/views/reports/sale_items/_shift_sale_report_filter.html.erb
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
- <%= form_tag report_path, :method => :get, :id=>"frm_report", :class => "form" do %>
- <% if period_type != false %>
-
-
- Select Period
-
- Today
- Yesterday
- This week
- Last week
- Last 7 days
- This month
- Last month
- Last 30 days
- This year
- Last year
-
-
-
-
-
-
- From
-
-
-
- To
-
-
-
-
-
-
- <% end %>
-
-
-
-
-
- <% if defined? promotions %>
- <%= select_tag "promotion", options_for_select(@promotions, :selected => params[:promotion_type]), :class => "form-control" %>
- <% end %>
-
- <% if defined? menu_types %>
- <%= select_tag "menu_type", options_for_select(@menu_types, :selected => params[:menu_type]), :class => "form-control" %>
- <% end %>
-
- <% if defined? payments %>
- <%= select_tag "payment_type", options_for_select(@payments, :selected => params[:payment_type]), :class => "form-control" %>
- <% end %>
-
- <% if defined? shift_name %>
-
- <% end %>
-
- <% if defined? cashiers %>
- <%= select_tag "cashier", options_from_collection_for_select(@cashiers,"id","name"),:prompt => "All Cashier Stations", :class => "form-control" %>
- <% end %>
-
- <% if defined? singer %>
- <%= select_tag "singer", options_from_collection_for_select(singer,"id","name"),:prompt => "All Vocal List", :class => "form-control" %>
- <% end %>
-
- <% if defined? bsm %>
- <%= select_tag "singer", options_from_collection_for_select(bsm,"id","name"),:prompt => "All BSM List", :class => "form-control" %>
- <% end %>
-
- <% if defined? guest_role %>
- <%= select_tag "guest_role", options_from_collection_for_select(@guest_role,"id","name"),:prompt => "Vocal/BSM List", :class => "form-control" %>
- <% end %>
-
- <% if defined? list_by_payment_type %>
- <%= select_tag "payment_type_list", options_for_select(@payment_list, :selected => params[:payment_type_list]), :class => "form-control" %>
- <% end %>
-
- <% if defined? products %>
- <%= select_tag "product", options_from_collection_for_select(@products,"id","name"),:prompt => "All Products", :class => "form-control" %>
- <% end %>
-
- <% if defined? items %>
- <%= select_tag "item", options_for_select(@items, :selected => params[:item_type]), :class => "form-control" %>
- <% end %>
-
-
-
-
-
- <% end %>
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/views/reports/sale_items/index.html.erb b/app/views/reports/sale_items/index.html.erb
deleted file mode 100644
index a3b460fc..00000000
--- a/app/views/reports/sale_items/index.html.erb
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
- <%= render :partial=>'shift_sale_report_filter',
- :locals=>{ :period_type => true, :shift_name => false, :report_path =>reports_sale_items_path} %>
-
-
-
-
-
-
-
-
-
-
-
- Date
-
-
-
- Menu Category
- Code
- Product
- Total Item
- Unit Price
- Revenue
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/views/reports/sale_items/index.xls.erb b/app/views/reports/sale_items/index.xls.erb
deleted file mode 100644
index 2807ec3f..00000000
--- a/app/views/reports/sale_items/index.xls.erb
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
-
-
-
-
-<% unless @sale_data.blank? %>
-
-
-
-
- <% if !params[:from].blank?%>
-
- From Date : <%= params[:from] %> , To Date : <%= params[:to] %>
-
- <% end %>
- <% if @shift_from %>
-
- <% if @shift_data.employee %>
- <% cashier_name = !@shift_data.nil? ? @shift_data.employee.name : '-' %>
- <% end %>
- Shift Name = <%= @shift_from %> - <%= @shift_to %> ( <%= cashier_name %> )
-
- <% end %>
-
-
- Menu Category
- Code
- Product
- Total Item
- Unit Price
- Revenue
-
-
-
-
- <% acc_arr = Array.new %>
- <% cate_arr = Array.new %>
-
- <% sub_total = 0.0 %>
- <% count = 0%>
- <% total_price = 0.0 %>
- <% cate_count = 0 %>
- <% acc_count = 0%>
- <% grand_total = 0%>
- <% total_discount = 0.0 %>
-
- <% @sale_data.order("total_item desc").each do |sale| %>
-
- <% if !acc_arr.include?(sale.account_id) %>
-
- <%= sale.account_name %>
-
- Total Price By <%= sale.account_name %>
-
- <% @totalByAccount.each do |account, total| %>
- <% if sale.account_id == account %>
- <%= total %>
- <% end %>
- <% end %>
-
-
- <% acc_arr.push(sale.account_id) %>
-
- <% end %>
-
-
- <% if !cate_arr.include?(sale.menu_category_id) %>
- <%= sale.menu_category_name %>
- <% cate_arr.push(sale.menu_category_id) %>
- <% else %>
-
- <% end %>
- <%= sale.code rescue '-' %>
- <% if @item_table == 'sale' %>
- <% if sale.item_remark == 'FOC' %>
- <%= '[PROMO] '.to_s + sale.product_name.to_s rescue '-' %>
- <% elsif sale.item_remark == 'FOC ITEM' %>
- <%= '[DIS:QTY] '.to_s + sale.product_name.to_s rescue '-' %>
- <% elsif sale.item_remark == 'DISCOUNT' %>
- <%= '[DIS:TP] '.to_s + sale.product_name.to_s rescue '-' %>
- <% else %>
- <%= sale.product_name.to_s rescue '-' %>
- <% end %>
- <% if sale.item_remark == 'DISCOUNT' %>
- -
- -
- <%= sale.total_price.abs rescue '-' %>
- <% total_price += sale.total_price %>
- <% else %>
- <%= sale.total_item.abs rescue '-' %>
- <%= sale.unit_price rescue '-' %>
- <%= sale.grand_total.abs rescue '-' %>
- <% end %>
- <% else %>
- <%= sale.product_name.to_s rescue '-' %>
- <%= sale.total_item.abs rescue '-' %>
- <%= sale.unit_price rescue '-' %>
- <%= sale.grand_total.abs rescue '-' %>
- <% end %>
-
-
-
- <% @menu_cate_count.each do |key,value| %>
- <% if sale.menu_category_id == key %>
- <% count = count + 1 %>
- <% sub_total += sale.grand_total %>
- <% if count == value %>
-
-
- Sub Total
- <%= sub_total + total_price %>
-
- <% sub_total = 0.0%>
- <% total_discount = total_discount + total_price %>
- <% total_price = 0.0%>
- <% count = 0%>
- <% end %>
- <% end %>
- <% end %>
-
- <% grand_total += sale.grand_total%>
- <% end %>
-
-
- Grand Total
- <%= grand_total + total_discount %>
-
-
-
-<% end %>
-
-
-
\ No newline at end of file
diff --git a/app/views/reports/sale_item/_shift_sale_report_filter.html.erb b/app/views/reports/saleitem/_shift_sale_report_filter.html.erb
similarity index 100%
rename from app/views/reports/sale_item/_shift_sale_report_filter.html.erb
rename to app/views/reports/saleitem/_shift_sale_report_filter.html.erb
diff --git a/app/views/reports/sale_item/index.html.erb b/app/views/reports/saleitem/index.html.erb
similarity index 95%
rename from app/views/reports/sale_item/index.html.erb
rename to app/views/reports/saleitem/index.html.erb
index a3b460fc..dd9fd1a5 100644
--- a/app/views/reports/sale_item/index.html.erb
+++ b/app/views/reports/saleitem/index.html.erb
@@ -7,14 +7,14 @@
<%= render :partial=>'shift_sale_report_filter',
- :locals=>{ :period_type => true, :shift_name => false, :report_path =>reports_sale_items_path} %>
+ :locals=>{ :period_type => true, :shift_name => false, :report_path =>reports_saleitem_index_path} %>
diff --git a/app/views/reports/sale_item/index.xls.erb b/app/views/reports/saleitem/index.xls.erb
similarity index 100%
rename from app/views/reports/sale_item/index.xls.erb
rename to app/views/reports/saleitem/index.xls.erb
diff --git a/config/routes.rb b/config/routes.rb
index cfaec2d0..ac43228c 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -217,8 +217,8 @@ Rails.application.routes.draw do
#--------- Reports Controller Sections ------------#
namespace :reports do
resources :receipt_no, :only => [:index, :show]
- resources :daily_sales, :only => [:index, :show]
- resources :sale_items, :only => [:index, :show]
+ resources :dailysale, :only => [:index, :show]
+ resources :saleitem, :only => [:index, :show]
# resources :sales, :only => [:index, :show]
# resources :orders, :only => [:index, :show]
# resources :customers, :only => [:index, :show]
diff --git a/spec/controllers/reports/dailysale_controller_spec.rb b/spec/controllers/reports/dailysale_controller_spec.rb
new file mode 100644
index 00000000..b80d898e
--- /dev/null
+++ b/spec/controllers/reports/dailysale_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Reports::DailysaleController, type: :controller do
+
+end
diff --git a/spec/controllers/reports/dailysales_controller_spec.rb b/spec/controllers/reports/dailysales_controller_spec.rb
deleted file mode 100644
index 83fcb321..00000000
--- a/spec/controllers/reports/dailysales_controller_spec.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe Reports::DailysalesController, type: :controller do
-
-end
diff --git a/spec/controllers/reports/sale_items_controller_spec.rb b/spec/controllers/reports/sale_items_controller_spec.rb
deleted file mode 100644
index 546fc874..00000000
--- a/spec/controllers/reports/sale_items_controller_spec.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require 'rails_helper'
-
-RSpec.describe Reports::SaleItemsController, type: :controller do
-
-end
diff --git a/spec/controllers/reports/saleitem_controller_spec.rb b/spec/controllers/reports/saleitem_controller_spec.rb
new file mode 100644
index 00000000..3e431a45
--- /dev/null
+++ b/spec/controllers/reports/saleitem_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Reports::SaleitemController, type: :controller do
+
+end
diff --git a/spec/helpers/reports/sale_items_helper_spec.rb b/spec/helpers/reports/dailysale_helper_spec.rb
similarity index 69%
rename from spec/helpers/reports/sale_items_helper_spec.rb
rename to spec/helpers/reports/dailysale_helper_spec.rb
index ea2807c4..2b1e1ddc 100644
--- a/spec/helpers/reports/sale_items_helper_spec.rb
+++ b/spec/helpers/reports/dailysale_helper_spec.rb
@@ -1,15 +1,15 @@
require 'rails_helper'
# Specs in this file have access to a helper object that includes
-# the Reports::SaleItemsHelper. For example:
+# the Reports::DailysaleHelper. For example:
#
-# describe Reports::SaleItemsHelper do
+# describe Reports::DailysaleHelper do
# describe "string concat" do
# it "concats two strings with spaces" do
# expect(helper.concat_strings("this","that")).to eq("this that")
# end
# end
# end
-RSpec.describe Reports::SaleItemsHelper, type: :helper do
+RSpec.describe Reports::DailysaleHelper, type: :helper do
pending "add some examples to (or delete) #{__FILE__}"
end
diff --git a/spec/helpers/reports/dailysales_helper_spec.rb b/spec/helpers/reports/saleitem_helper_spec.rb
similarity index 69%
rename from spec/helpers/reports/dailysales_helper_spec.rb
rename to spec/helpers/reports/saleitem_helper_spec.rb
index 96853812..2c579f0e 100644
--- a/spec/helpers/reports/dailysales_helper_spec.rb
+++ b/spec/helpers/reports/saleitem_helper_spec.rb
@@ -1,15 +1,15 @@
require 'rails_helper'
# Specs in this file have access to a helper object that includes
-# the Reports::DailysalesHelper. For example:
+# the Reports::SaleitemHelper. For example:
#
-# describe Reports::DailysalesHelper do
+# describe Reports::SaleitemHelper do
# describe "string concat" do
# it "concats two strings with spaces" do
# expect(helper.concat_strings("this","that")).to eq("this that")
# end
# end
# end
-RSpec.describe Reports::DailysalesHelper, type: :helper do
+RSpec.describe Reports::SaleitemHelper, type: :helper do
pending "add some examples to (or delete) #{__FILE__}"
end
From f762664912adddb355fe9c3bfa80c0891c90e1d3 Mon Sep 17 00:00:00 2001
From: Aung Myo
Date: Tue, 27 Jun 2017 14:16:48 +0630
Subject: [PATCH 04/18] update bill
---
app/controllers/api/bill_controller.rb | 2 +-
app/controllers/base_origami_controller.rb | 1 -
app/helpers/origami/request_bills_helper.rb | 1 +
app/pdf/receipt_bill_pdf.rb | 2 +-
app/views/layouts/_header.html.erb | 2 +-
config/application.rb | 1 +
6 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/app/controllers/api/bill_controller.rb b/app/controllers/api/bill_controller.rb
index f7a4070d..1160efcc 100644
--- a/app/controllers/api/bill_controller.rb
+++ b/app/controllers/api/bill_controller.rb
@@ -32,7 +32,7 @@ class Api::BillController < Api::ApiController
#shop detail
shop_details = Shop.find(1)
- customer= Customer.where('customer_id=' + @sale_data.customer_id)
+ customer= Customer.find(@sale_data.customer_id)
# get member information
member_info = Customer.get_member_account(customer)
diff --git a/app/controllers/base_origami_controller.rb b/app/controllers/base_origami_controller.rb
index 2af895da..be4b4055 100644
--- a/app/controllers/base_origami_controller.rb
+++ b/app/controllers/base_origami_controller.rb
@@ -14,5 +14,4 @@ class BaseOrigamiController < ActionController::Base
@current_user ||= Employee.find_by_token_session(session[:session_token]) if session[:session_token]
end
-
end
diff --git a/app/helpers/origami/request_bills_helper.rb b/app/helpers/origami/request_bills_helper.rb
index a33f7c3e..2d1f8313 100644
--- a/app/helpers/origami/request_bills_helper.rb
+++ b/app/helpers/origami/request_bills_helper.rb
@@ -1,2 +1,3 @@
module Origami::RequestBillsHelper
+
end
diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb
index b156e2c2..ad48d457 100644
--- a/app/pdf/receipt_bill_pdf.rb
+++ b/app/pdf/receipt_bill_pdf.rb
@@ -83,7 +83,7 @@ class ReceiptBillPdf < Prawn::Document
y_position = cursor
bounding_box([0,y_position], :width =>self.page_width - 10, :height => self.item_height) do
- text "Receipt Date : #{ sale_data.receipt_date.strftime('%d-%m-%Y') } ( #{ sale_data.bookings[0].checkin_at.utc.getlocal.strftime('%I:%M %p') } - #{ sale_data.bookings[0].checkin_at.utc.getlocal.strftime('%I:%M %p') } )",:size => self.item_font_size,:align => :left
+ text "Receipt Date : #{ sale_data.receipt_date.strftime('%d-%m-%Y') } ( #{ sale_data.bookings[0].checkin_at.utc.getlocal.strftime('%I:%M %p') } - #{ sale_data.bookings[0].checkout_at.utc.getlocal.strftime('%I:%M %p') } )",:size => self.item_font_size,:align => :left
end
diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb
index 05b74b7a..5a3a03af 100644
--- a/app/views/layouts/_header.html.erb
+++ b/app/views/layouts/_header.html.erb
@@ -33,7 +33,7 @@
diff --git a/config/application.rb b/config/application.rb
index 5ce0a92a..aa177b01 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -14,6 +14,7 @@ module SXRestaurants
config.active_record.time_zone_aware_types = [:datetime, :time]
config.active_job.queue_adapter = :sidekiq
# config.time_zone = 'Asia/Rangoon'
+
end
end
From ff2844124e0910e2dfa4acea6c23e53af3414da8 Mon Sep 17 00:00:00 2001
From: Aung Myo
Date: Tue, 27 Jun 2017 15:10:42 +0630
Subject: [PATCH 05/18] update utc
---
app/views/origami/sales/show.html.erb | 2 +-
config/application.rb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/views/origami/sales/show.html.erb b/app/views/origami/sales/show.html.erb
index cd716052..7e9de940 100644
--- a/app/views/origami/sales/show.html.erb
+++ b/app/views/origami/sales/show.html.erb
@@ -117,7 +117,7 @@
-
Date: <%= @sale.created_at.utc.getlocal.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%>
+
Date: <%= @sale.created_at.strftime("%d/%m/%Y - %I:%M %p") rescue '-'%>
diff --git a/config/application.rb b/config/application.rb
index aa177b01..a47dcba0 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -13,7 +13,7 @@ module SXRestaurants
# -- all .rb files in that directory are automatically loaded.
config.active_record.time_zone_aware_types = [:datetime, :time]
config.active_job.queue_adapter = :sidekiq
- # config.time_zone = 'Asia/Rangoon'
+ config.time_zone = 'Asia/Rangoon'
end
From 945963362ae07631034332cdc61a5df96c0f2c6d Mon Sep 17 00:00:00 2001
From: Aung Myo
Date: Tue, 27 Jun 2017 15:25:13 +0630
Subject: [PATCH 06/18] update queue migration
---
...ate_dining_queues.rb => 20170627085117_dining_queues.rb} | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
rename db/migrate/{20170623101708_create_dining_queues.rb => 20170627085117_dining_queues.rb} (69%)
diff --git a/db/migrate/20170623101708_create_dining_queues.rb b/db/migrate/20170627085117_dining_queues.rb
similarity index 69%
rename from db/migrate/20170623101708_create_dining_queues.rb
rename to db/migrate/20170627085117_dining_queues.rb
index dd2ea134..a4977f8c 100644
--- a/db/migrate/20170623101708_create_dining_queues.rb
+++ b/db/migrate/20170627085117_dining_queues.rb
@@ -1,6 +1,6 @@
-class CreateDiningQueues < ActiveRecord::Migration[5.1]
+class DiningQueues < ActiveRecord::Migration[5.1]
def change
- create_table :dining_queues do |t|
+ create_table :dining_queues do |t|
t.string :name
t.string :contact_no
t.string :queue_no
@@ -9,6 +9,6 @@ class CreateDiningQueues < ActiveRecord::Migration[5.1]
t.integer :seater
t.string :remark
t.timestamps
- end
+ end
end
end
From de398c09c3ea4d6f40e4bb25f4abcbbbdd81b9ea Mon Sep 17 00:00:00 2001
From: Aung Myo
Date: Tue, 27 Jun 2017 16:24:03 +0630
Subject: [PATCH 07/18] update
---
.idea/workspace.xml | 817 --------------------------------------------
dump.rdb | Bin 18261 -> 17896 bytes
2 files changed, 817 deletions(-)
delete mode 100644 .idea/workspace.xml
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
deleted file mode 100644
index 4d3242d5..00000000
--- a/.idea/workspace.xml
+++ /dev/null
@@ -1,817 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- origami
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
- DEFINITION_ORDER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- project
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1498458293643
-
-
- 1498458293643
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dump.rdb b/dump.rdb
index acef6aa79d6c19cf0bb0d215a80225ad58500e81..309652ebd148d42f259ba3961d5921ba82d953f6 100644
GIT binary patch
delta 1621
zcmZvcO>9(E6vyYzo2F$#r_-8JigfxQR*~A_et)Du`^MBp4Uyss6xxW5iUHFq3l>dA
zrYMPtf!w&Cv}0VjDZVZ=7{hclWHcsz#Kfvd2`;)4s<==S^xpSo-pr!gllRW~pWpfa
z?+@>S^>@G}xczYQ$kBh=&b~hV;?U{o(<_%&x5e(q{_O#}KiPA6GLzU2hm6b6-~%
zqDnFiFab7#!dStbbe&iKiK&)aBk*~1oQUt
z>*l~7xM@D`4?S=S
z_#1=IfDRy;+mi^EatC5UZ^-BMheN4Hqb15gOFkPK!SB
zlrbao=t%5J0zsr?@jjS5=?;#5>n?a5A^GwagPB7lIc}ggs%=dPWv^-}&+B_TuBW#|
zl!ZG0a6ow&lpJnG6*q$nc-H;cK@>#`U`n&b8HkzIKj|fMK`%X2?P!l0E6C0DHso{r
z6O2=eivL;3kBxp;KOM}kSk4?1g&K-&SB|Oqx#F$WeE3v*waFJq5rmNO#qopJN-f5i
z3O8#Obt^8nT4NweLdo2Shhc@1iWgq)ynb&_HPsL;IZ=97>cjzKa)(f<+{LNQTy9x2
zMTAn3a-qVSVo1B*MgOh6uLA$p&<)4=H8UQpFa-PjRM~JWphSg|GluJLa41?ct&l>X;
z^uoi{&ImV!iV^Pi>(Ba*jTQ2xR+@!Enk%`bsXuBkzG&FRrU-MYXal;EGAMB->nAPf
zuAT-9$|+=)g=a3>A_!;3i4B9-%mVYvaRb`D8s{|Jfg>W3eML;5h~Zoh`qyr?y|sQu
zcOVY6n|fitd2ywpO_U=O`u2b(z5=Sbw0%pg4YBdKg<0{w&yCsS`}vUtV0>~oVAR)L
ztw)~-OsLX-cF#N#Jtn@%;;xI15{=X-X2?*b6jZ+J-Drug$IZLGL-&r;w(-B;ADch)
G$?X4wG2~eQ
delta 1914
zcmZuyOKenC7@j+KNFUlMZG+|AgWCFNJ3a45%VXw}`iM#uLW~P(XF3C!3I$79Ktdcq
zTxen_M;9)PLtN>uy@jN%Y)2y_CPs-yB#lF2j0+P5U8w=jy>sVI6}NxxeE)a8$3H*6
zVSV$abq=mwy!Gr0e>NUFn#=Yd${kuN-rN|u9rq?!IWfjcIg?*eI(l27~LE7KGx4QZ`7|h59uS#8+4_)tEtCcHISKH2Uq
zXIK!){E|!O-6*sIA=Y}=ol0&6a
z?PD@V6_T=eD)~
zBi>8&@b+>`xQQ|-^@bfU_maZuK#&Fl0tq8kSgIgF(4SC-OR4XjQ6FVOUI|gS;1uay
z4CueNsBMv1TbKtX&yU@)M#n*4^6Ln%g2Td+2hIq^Cw-@l*bD{}RZ4y5I3Bj^bWT{-
zHGOX9Ssm}X+`d8>W0R5q=t~c6)`fVtmYdtRpRZVRHiwWF{e8V=U-+0MBN7ynKv`XA
zUc&_UN7y%axBnQt?n=BS2_=RSHsbHo`Sl%rA=JF5H)M*aP#ErUHzO(y`Rl$gr}YI`
zZf&Sp2^yl9^O`hUBeOAyIYh&Vxr71GuP;Bs7n><~(Txc})MBO1k|U
z4p{beC+(gBPg^UtQj8G%&(7U7_&=FXrAE-_Yu*|EFqDfs4aC2_qLrg{lzMieP`Uyt9mYBhGRDYv%N
z5+I4`r3!Wo>9hB>_Joo0K?TN&hm0{dpaK)9+>wWWu!9!N_g!9rXvzjf4RO$>h|+qX
zSgps4Oh{GS{?I8}b!-L!W64|CWe$vrI2;rbx}NM!5PCURE2P_v)tsihWufoett|G
zSK=xvNQheug1;E^QqIAE6`UULt{GG_qtcwUZ=ENC;O}tX#(Qjg$$8ul<+*!4f2DRB
z%vF>ebTv;+9iAFJlskGfeIR)zerz&7nV-(559UwgvS1v%ADd23PJe=XYWtv4_2(>mB>3W#U)Y2pMtx-P%Fzo#rhy7A*G?L48>JKLJ7@ZLMe6C
m84h?R-50lJEIroqnmd%-yUJS7Gs7c|Zw)^G?pXJUPyPX*t}s^s
From c16d322cea36759289b7bbab896c62ced5dafa5f Mon Sep 17 00:00:00 2001
From: Aung Myo
Date: Wed, 28 Jun 2017 11:50:05 +0630
Subject: [PATCH 08/18] update pdf and font
---
app/models/ability.rb | 1 +
app/models/printer/order_queue_printer.rb | 26 +-
app/pdf/order_item_pdf.rb | 24 +-
app/pdf/order_summary_pdf.rb | 21 +-
app/views/reports/saleitem/index.xls.erb | 34 +-
public/fonts/Chinese.ttf | Bin 0 -> 17965572 bytes
public/fonts/Japanese.ttf | Bin 0 -> 9360128 bytes
public/fonts/Zawgyi-One.eot | Bin 0 -> 340370 bytes
public/fonts/Zawgyi-One.otf | Bin 0 -> 440184 bytes
public/fonts/Zawgyi-One.svg | 9122 +++++++++++++++++++++
public/fonts/Zawgyi-One.ttf | Bin 0 -> 340172 bytes
public/fonts/padauk.ttf | Bin 0 -> 472488 bytes
public/fonts/zawgyi-one-webfont.svg | 327 +
public/fonts/zawgyi-one.woff | Bin 0 -> 192708 bytes
public/fonts/zawgyi.eot | Bin 0 -> 159735 bytes
15 files changed, 9496 insertions(+), 59 deletions(-)
create mode 100755 public/fonts/Chinese.ttf
create mode 100755 public/fonts/Japanese.ttf
create mode 100755 public/fonts/Zawgyi-One.eot
create mode 100755 public/fonts/Zawgyi-One.otf
create mode 100755 public/fonts/Zawgyi-One.svg
create mode 100755 public/fonts/Zawgyi-One.ttf
create mode 100755 public/fonts/padauk.ttf
create mode 100755 public/fonts/zawgyi-one-webfont.svg
create mode 100644 public/fonts/zawgyi-one.woff
create mode 100644 public/fonts/zawgyi.eot
diff --git a/app/models/ability.rb b/app/models/ability.rb
index 548cc1cd..6bcdd204 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -31,6 +31,7 @@ class Ability
can :manage, Sale
can :manage, Customer
+ can :manage, DiningQueue
can :index, :dailysale
can :index, :saleitem
diff --git a/app/models/printer/order_queue_printer.rb b/app/models/printer/order_queue_printer.rb
index f80ee72d..8023742c 100644
--- a/app/models/printer/order_queue_printer.rb
+++ b/app/models/printer/order_queue_printer.rb
@@ -10,7 +10,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# check for item not to show
if order_item[0].price != 0
- pdf = OrderItemPdf.new(order_item[0], print_status, options)
+ pdf = OrderItemPdf.new(order_item[0], print_status, options, oqs.use_alternate_name)
pdf.render_file filename
if oqs.print_copy
@@ -31,6 +31,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
#Generate PDF
#Print
order=print_query('order_summary', order_id)
+
# For Print Per Item
if oqs.cut_per_item
order_items.each do|odi|
@@ -40,7 +41,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# check for item not to show
if odi.price != 0 || odi.price != 10
- pdf = OrderItemPdf.new(odi, print_status, options)
+ pdf = OrderItemPdf.new(odi, print_status, options, oqs.use_alternate_name)
# pdf.render_file "tmp/order_item.pdf"
pdf.render_file filename
if oqs.print_copy
@@ -54,7 +55,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# For Print Order Summary
else
filename = "tmp/order_summary_#{ order_id }" + ".pdf"
- pdf = OrderSummaryPdf.new(order, print_status, order_items)
+ pdf = OrderSummaryPdf.new(order, print_status, order_items, oqs.use_alternate_name)
pdf.render_file filename
if oqs.print_copy
self.print(filename, oqs.printer_name)
@@ -80,7 +81,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# check for item not to show
if odi.price != 0
- pdf = OrderItemPdf.new(odi, print_status, options)
+ pdf = OrderItemPdf.new(odi, print_status, options,oqs.use_alternate_name)
pdf.render_file filename
if oqs.print_copy
@@ -97,7 +98,7 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# For Print Order Summary
else
filename = "tmp/booking_summary_#{ booking_id }" + ".pdf"
- pdf = OrderSummaryPdf.new(order, print_status)
+ pdf = OrderSummaryPdf.new(order, print_status,oqs.use_alternate_name)
pdf.render_file filename
if oqs.print_copy
self.print(filename, oqs.printer_name)
@@ -114,31 +115,34 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker
# Query for OQS with status
def print_query(type, id)
if type == "order_item"
- OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining")
+ OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
.joins("left join orders ON orders.order_id = order_items.order_id
left join booking_orders AS bo ON bo.order_id=order_items.order_id
left join bookings AS b ON b.booking_id = bo.booking_id
left join dining_facilities AS df ON df.id = b.dining_facility_id
- left join customers as cus ON cus.customer_id = orders.customer_id")
+ left join customers as cus ON cus.customer_id = orders.customer_id
+ left join menu_items as item ON item.item_code = order_items.item_code")
.where("order_items.item_code = '#{ id }' AND order_items.price != 0")
.group("order_items.item_code")
elsif type == "order_summary"
- OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining")
+ OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
.joins("left join orders ON orders.order_id = order_items.order_id
left join booking_orders AS bo ON bo.order_id=order_items.order_id
left join bookings AS b ON b.booking_id = bo.booking_id
left join dining_facilities AS df ON df.id = b.dining_facility_id
- left join customers as cus ON cus.customer_id = orders.customer_id")
+ left join customers as cus ON cus.customer_id = orders.customer_id
+ left join menu_items as item ON item.item_code = order_items.item_code")
.where("orders.order_id = '#{ id }' AND order_items.price != 0")
.group("order_items.order_items_id")
else
# order summary for booking
- OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining")
+ OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name")
.joins("left join orders ON orders.order_id = order_items.order_id
left join booking_orders AS bo ON bo.order_id=order_items.order_id
left join bookings AS b ON b.booking_id = bo.booking_id
left join dining_facilities AS df ON df.id = b.dining_facility_id
- left join customers as cus ON cus.customer_id = orders.customer_id")
+ left join customers as cus ON cus.customer_id = orders.customer_id
+ left join menu_items as item ON item.item_code = order_items.item_code")
.where("b.booking_id = '#{ id }' AND order_items.price != 0")
end
diff --git a/app/pdf/order_item_pdf.rb b/app/pdf/order_item_pdf.rb
index b6c821fc..3f697e06 100644
--- a/app/pdf/order_item_pdf.rb
+++ b/app/pdf/order_item_pdf.rb
@@ -1,6 +1,6 @@
class OrderItemPdf < Prawn::Document
attr_accessor :label_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:total_width,:item_description_width
- def initialize(order_item, print_status, options)
+ def initialize(order_item, print_status, options, alt_name)
self.page_width = 210
self.page_height = 1450
self.margin = 5
@@ -15,9 +15,9 @@ class OrderItemPdf < Prawn::Document
super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
# super(:margin => [10, 5, 30, 5], :page_size => [200,400])
- # font "public/fonts/#{font_name}".to_s + ".ttf".to_s
- # font "public/fonts/Zawgyi-One.ttf"
- # font "public/fonts/padauk.ttf"
+ # font "public/fonts/#{font_name}".to_s + ".ttf".to_s
+ font "public/fonts/Zawgyi-One.ttf"
+ font "public/fonts/padauk.ttf"
self.header_font_size = 12
self.item_font_size = 10
@@ -29,7 +29,7 @@ class OrderItemPdf < Prawn::Document
order_info(order_item.order_id, order_item.order_by,order_item.order_at)
# order items
- order_items(order_item, options)
+ order_items(order_item, options, alt_name)
end
# Write Order Information to PDF
@@ -57,11 +57,11 @@ class OrderItemPdf < Prawn::Document
end
# Write Order items to PDF
- def order_items(order_item, options)
+ def order_items(order_item, options, alt_name)
y_position = cursor
#Add Order Item
- add_order_items(order_item, options)
+ add_order_items(order_item, options, alt_name)
dash(1, :space => 1, :phase => 1)
stroke_horizontal_line 0, (self.page_width - self.margin)
@@ -69,7 +69,7 @@ class OrderItemPdf < Prawn::Document
end
# Add order items under order info
- def add_order_items(order_item, options)
+ def add_order_items(order_item, options, alt_name)
y_position = cursor
move_down 5
@@ -82,6 +82,14 @@ class OrderItemPdf < Prawn::Document
text "[#{order_item.qty.to_i}]", :size => self.item_font_size,:align => :left
end
+ move_down 3
+ if alt_name
+ y_position = cursor
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "(#{order_item.alt_name})", :size => self.item_font_size,:align => :left
+ end
+ end
+
move_down 5
# add option
diff --git a/app/pdf/order_summary_pdf.rb b/app/pdf/order_summary_pdf.rb
index 89eac43c..d5b11d23 100644
--- a/app/pdf/order_summary_pdf.rb
+++ b/app/pdf/order_summary_pdf.rb
@@ -1,6 +1,6 @@
class OrderSummaryPdf < Prawn::Document
attr_accessor :label_width,:price_column_width,:page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size,:item_height,:qty_width,:total_width,:item_description_width
- def initialize(order, print_status, order_items = nil)
+ def initialize(order, print_status, order_items = nil,alt_name)
self.page_width = 210
self.page_height = 1450
self.margin = 5
@@ -15,8 +15,8 @@ class OrderSummaryPdf < Prawn::Document
super(:margin => [self.margin, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height])
# font "public/fonts/#{font_name}".to_s + ".ttf".to_s
- # font "public/fonts/Zawgyi-One.ttf"
- # font "public/fonts/padauk.ttf"
+ font "public/fonts/Zawgyi-One.ttf"
+ font "public/fonts/padauk.ttf"
self.header_font_size = 12
self.item_font_size = 10
@@ -31,7 +31,7 @@ class OrderSummaryPdf < Prawn::Document
if order_items == nil
order_items(order)
else
- order_items(order_items)
+ order_items(order_items, alt_name)
end
end
@@ -60,7 +60,7 @@ class OrderSummaryPdf < Prawn::Document
end
# Write Order items to PDF
- def order_items(order_item)
+ def order_items(order_item, alt_name)
y_position = cursor
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
@@ -75,12 +75,12 @@ class OrderSummaryPdf < Prawn::Document
move_down 5
#Add Order Item
- add_order_items(order_item)
+ add_order_items(order_item, alt_name)
end
# Add order items under order info
- def add_order_items(order_item)
+ def add_order_items(order_item, alt_name)
y_position = cursor
move_down 5
@@ -98,6 +98,13 @@ class OrderSummaryPdf < Prawn::Document
text "#{odi.qty}", :size => self.item_font_size,:align => :left
end
+ move_down 3
+ if alt_name
+ y_position = cursor
+ bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
+ text "(#{odi.alt_name})", :size => self.item_font_size,:align => :left
+ end
+ end
move_down 5
# add option
diff --git a/app/views/reports/saleitem/index.xls.erb b/app/views/reports/saleitem/index.xls.erb
index 2807ec3f..3773619b 100644
--- a/app/views/reports/saleitem/index.xls.erb
+++ b/app/views/reports/saleitem/index.xls.erb
@@ -49,22 +49,6 @@
<% @sale_data.order("total_item desc").each do |sale| %>
- <% if !acc_arr.include?(sale.account_id) %>
-
- <%= sale.account_name %>
-
- Total Price By <%= sale.account_name %>
-
- <% @totalByAccount.each do |account, total| %>
- <% if sale.account_id == account %>
- <%= total %>
- <% end %>
- <% end %>
-
-
- <% acc_arr.push(sale.account_id) %>
-
- <% end %>
<% if !cate_arr.include?(sale.menu_category_id) %>
@@ -103,23 +87,7 @@
- <% @menu_cate_count.each do |key,value| %>
- <% if sale.menu_category_id == key %>
- <% count = count + 1 %>
- <% sub_total += sale.grand_total %>
- <% if count == value %>
-
-
- Sub Total
- <%= sub_total + total_price %>
-
- <% sub_total = 0.0%>
- <% total_discount = total_discount + total_price %>
- <% total_price = 0.0%>
- <% count = 0%>
- <% end %>
- <% end %>
- <% end %>
+
<% grand_total += sale.grand_total%>
<% end %>
diff --git a/public/fonts/Chinese.ttf b/public/fonts/Chinese.ttf
new file mode 100755
index 0000000000000000000000000000000000000000..6d26dd752501a8c0eb5372273ea8a2eef9a9e6d5
GIT binary patch
literal 17965572
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