From f559aa0f14bc0d7dca6bc2a76b7980248f701a09 Mon Sep 17 00:00:00 2001 From: phyusin Date: Mon, 26 Feb 2018 09:20:57 +0630 Subject: [PATCH] product sale query --- .../reports/product_sale_controller.rb | 70 +---- app/models/sale.rb | 54 +--- .../_shift_sale_report_filter.html.erb | 120 ------- app/views/reports/product_sale/index.html.erb | 294 ++++-------------- app/views/reports/product_sale/index.xls.erb | 177 ++--------- 5 files changed, 119 insertions(+), 596 deletions(-) delete mode 100755 app/views/reports/product_sale/_shift_sale_report_filter.html.erb diff --git a/app/controllers/reports/product_sale_controller.rb b/app/controllers/reports/product_sale_controller.rb index 0061818a..afb4b537 100644 --- a/app/controllers/reports/product_sale_controller.rb +++ b/app/controllers/reports/product_sale_controller.rb @@ -2,79 +2,19 @@ class Reports::ProductSaleController < BaseReportController authorize_resource :class => false def index - from, to = get_date_range_from_params - shift_sale_range = Sale.get_by_shift_sale(from,to,Sale::SALE_STATUS_COMPLETED) + order_by = 'desc' + if !params[:order_by].nil? + order_by = params[:order_by] + end - shift = '' - if params[:shift_name].to_i != 0 - shift_sale = ShiftSale.find(params[:shift_name]) - if to.blank? - shift = ShiftSale.where('shift_started_at = ? and shift_closed_at is NULL ',shift_sale.shift_started_at) - else - - shift = ShiftSale.where('shift_started_at = ? and shift_closed_at = ? ',shift_sale.shift_started_at, shift_sale.shift_closed_at) - end - end - @sale_data, @grand_total = Sale.get_by_items(shift_sale_range,shift, from, to) - - @sale_taxes = Sale.get_separate_tax(shift_sale_range,shift,from,to,nil) - - @account_cate_count = Hash.new {|hash, key| hash[key] = 0} - - - @sale_data.each {|acc_cate| @account_cate_count[acc_cate.account_id] += 1} - - @menu_cate_count = Hash.new {|hash, key| hash[key] = 0} - @sale_data.each {|cate| @menu_cate_count[cate.account_id] += 1} - - - @totalByAccount = Hash.new {|hash, key| hash[key] = 0} - @sale_data.each {|acc| @totalByAccount[acc.account_id] += acc.grand_total} - - @from = from - @to = to + @sale_data = Sale.get_menu_item_query(order_by) # get printer info @print_settings = PrintSetting.get_precision_delimiter() - if shift.present? - shift.each do |sh| - @shift_from = sh.shift_started_at.nil? ? '-' : sh.shift_started_at.utc.getlocal.strftime("%e %b %I:%M%p") - @shift_to = sh.shift_closed_at.nil? ? '-' : sh.shift_closed_at.utc.getlocal.strftime("%e %b %I:%M%p") - @shift_data = sh - end - end - respond_to do |format| format.html format.xls end end - - # def show - # from, to, report_type = get_date_range_from_params - - # @sale_data = Sale.get_by_shift_sale(from,to,Sale::SALE_STATUS_COMPLETED) - - # date_arr = Array.new - # @sale_data.each do |sale| - # local_opening_date = sale.opening_date.nil? ? '-' : sale.opening_date.utc.getlocal.strftime("%e %b %I:%M%p") - # local_closing_date = sale.closing_date.nil? ? '-' : sale.closing_date.utc.getlocal.strftime("%e %b %I:%M%p") - # opening_date = sale.opening_date.nil? ? '-' : sale.opening_date.utc - # closing_date = sale.closing_date.nil? ? '-' : sale.closing_date.utc - # shift_id = sale.id.nil? ? '-' : sale.id - # str = {:shift_id => shift_id, :local_opening_date => local_opening_date, :local_closing_date => local_closing_date, :opening_date => opening_date, :closing_date => closing_date} - # date_arr.push(str) - # end - - # @totalByAccount = Hash.new {|hash, key| hash[key] = 0} - # @sale_data.each {|acc| @totalByAccount[acc.account_id] += acc.grand_total} - - # out = {:status => 'ok', :message => date_arr} - - # respond_to do |format| - # format.json { render json: out } - # end - # end - end diff --git a/app/models/sale.rb b/app/models/sale.rb index 54806964..4167d549 100755 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -861,45 +861,23 @@ def self.get_by_shift_items(shift_sale_range, shift, from, to, status) end #product sale report query -def self.get_menu_item_query() - query = MenuItem.select("acc.id as account_id, acc.title as account_name, - i.item_instance_code as item_code, " + - "i.qty as qty," + - "i.product_name as product_name, +def self.get_menu_item_query(order_by) + query = MenuItem.unscoped.select("acc.id as account_id, + acc.title as account_name, + mii.item_instance_code as item_code, " + + "(CASE WHEN si.qty > 0 THEN SUM(si.qty) ELSE 0 END) as total_item," + + "(CASE WHEN si.unit_price > 0 THEN si.unit_price ELSE mii.price END) as unit_price," + + "(CASE WHEN (si.qty * si.unit_price) > 0 THEN (si.qty * si.unit_price) ELSE 0 END) as grand_total," + + "mii.price as unit_price, menu_items.name as product_name, mc.name as" + - " menu_category_name,mc.id as menu_category_id ") - - query = query.joins(" LEFT JOIN menu_item_instances mii ON i.item_instance_code = mii.item_instance_code" + - " LEFT JOIN menu_items mi ON mi.id = mii.menu_item_id" + - " LEFT JOIN menu_categories mc ON mc.id = mi.menu_category_id" + - " LEFT JOIN accounts acc ON acc.id = mi.account_id") - query = query.group("acc.title,mi.account_id,mi.menu_category_id,mi.name,mii.price") - .order("acc.title desc, mi.account_id desc, mi.menu_category_id desc, mii.price asc") -end - -def self.get_by_items(shift_sale_range, shift, from, to) - query = self.get_menu_item_query() - - puts "query" - total_grand_total = 0 - - # if shift.present? - # query = query.where("sales.shift_sale_id IN (?)",shift.to_a) - - # # total_grand_total = total_cash_amount.to_f + total_card_amount.to_f + total_credit_amount.to_f - - # ### => get all sales range in shift_sales - # elsif shift_sale_range.present? - # query = query.where("sales.shift_sale_id IN (?)",shift_sale_range.to_a) - - # # total_grand_total = total_cash_amount.to_f + total_card_amount.to_f + total_credit_amount.to_f - - # else - # query = query.where("sales.receipt_date between ? and ?",from,to) - # # total_grand_total = total_cash_amount.to_f + total_card_amount.to_f + total_credit_amount.to_f - # end - - return query, total_grand_total + " menu_category_name,mc.id as menu_category_id, si.remark as status_type, si.price as price ") + .joins(" LEFT JOIN menu_item_instances mii ON menu_items.id = mii.menu_item_id" + + " LEFT JOIN menu_categories mc ON mc.id = menu_items.menu_category_id" + + " LEFT JOIN accounts acc ON acc.id = menu_items.account_id" + + " LEFT JOIN sale_items si ON si.item_instance_code = mii.item_instance_code" + + " LEFT JOIN sales s ON s.sale_id = si.sale_id") + .group("mc.id, menu_items.name, si.qty, (CASE WHEN si.unit_price > 0 THEN si.unit_price ELSE mii.price END)") + .order("si.qty #{order_by}, menu_items.menu_category_id desc") end #product sale report query diff --git a/app/views/reports/product_sale/_shift_sale_report_filter.html.erb b/app/views/reports/product_sale/_shift_sale_report_filter.html.erb deleted file mode 100755 index 88f26c1f..00000000 --- a/app/views/reports/product_sale/_shift_sale_report_filter.html.erb +++ /dev/null @@ -1,120 +0,0 @@ -
- <%= form_tag report_path, :method => :get, :id=>"frm_report", :class => "form" do %> - <% if period_type != false %> -
-
- - -
- -
- - - -
-
- - -
-
- - -
-
-
- -
-
- <% end %> - - <% end %> -
- - diff --git a/app/views/reports/product_sale/index.html.erb b/app/views/reports/product_sale/index.html.erb index 12e1dfe1..ab3136a3 100644 --- a/app/views/reports/product_sale/index.html.erb +++ b/app/views/reports/product_sale/index.html.erb @@ -9,31 +9,25 @@
- <%= render :partial=>'shift_sale_report_filter', - :locals=>{ :period_type => true, :shift_name => true, :report_path =>reports_product_sale_index_path} %> - -
-
+
+
+ + +
+
+
- - - - <% if @shift_from %> - - <% if @shift_data.employee %> - <% cashier_name = !@shift_data.nil? ? @shift_data.employee.name : '-' %> - <% end %> - - - <% end %> @@ -41,7 +35,7 @@ - + @@ -58,114 +52,48 @@ end %> <% unless @sale_data.blank? %> - <% acc_arr = Array.new %> - <% cate_arr = Array.new %> + <% acc_arr = Array.new %> + <% cate_arr = Array.new %> - <% sub_qty = 0 %> - <% sub_total = 0 %> - <% other_sub_total = 0 %> - <% count = 0 %> - <% total_price = 0 %> - <% cate_count = 0 %> - <% acc_count = 0 %> - <% grand_total = 0 %> - <% total_qty = 0 %> - <% total_amount = 0 %> - <% discount = 0 %> - <% total_item_foc = 0 %> - <% total_item_dis = 0.0 %> - <% total_tax = 0 %> + <% grand_total = 0 %> + <% total_qty = 0 %> - <% @sale_data.each do |sale| %> - - <% if sale.status_type != "Discount" && sale.status_type != "foc" - total_qty += sale.total_item - end %> - <% if sale.status_type == "foc" && sale.price > 0 - total_qty += sale.total_item - end %> - - <% if sale.status_type == "foc" && sale.grand_total < 0 - total_item_foc += sale.grand_total*(-1) - end %> - - <% if sale.status_type == "Discount" && sale.grand_total < 0 - total_item_dis += sale.grand_total*(-1) - end %> - - <% if !acc_arr.include?(sale.account_id) %> - - - - - - - <% acc_arr.push(sale.account_id) %> - <% end %> - - - <% if !cate_arr.include?(sale.menu_category_id) %> - - <% cate_arr.push(sale.menu_category_id) %> - <% else %> - - <% end %> - - - - - - - - - <% @menu_cate_count.each do |key,value| %> - <% if sale.account_id == key %> - <% count = count + 1 %> - <% sub_total += sale.grand_total %> - <% #sub_qty += sale.total_item %> - <% if sale.status_type!="Discount" && (!sale.product_name.include? "FOC") - sub_qty += sale.total_item + <% @sale_data.each do |sale| %> + <% if sale.status_type != "Discount" && sale.status_type != "foc" + total_qty += sale.total_item + grand_total += sale.grand_total + end %> + <% if sale.status_type == "foc" && sale.price > 0 + total_qty += sale.total_item + grand_total += sale.grand_total end %> - <% if count == value %> - - - - - - - - <% sub_total = 0.0%> - <% sub_qty = 0 %> - <% count = 0%> - <% end %> - <% end %> - <% end %> - - <% end %> - - - - - - - - - <% end %> - - + + + <% if !cate_arr.include?(sale.menu_category_id) %> + + <% cate_arr.push(sale.menu_category_id) %> + <% else %> + + <% end %> + + + + + + + + + <% end %> - - - + + + + + + + <% end %>
<%= t("views.right_panel.detail.from_date") %> : <%= @from.utc.getlocal.strftime("%Y-%b-%d") rescue '-' %> - <%= t("views.right_panel.detail.to_date") %> : <%= @to.utc.getlocal.strftime("%Y-%b-%d") rescue '-'%>
<%= t("views.right_panel.detail.shift_name") %> = <%= @shift_from %> - <%= @shift_to %> ( <%= cashier_name %> )
  <%= t("views.right_panel.header.menu_category") %><%= t("views.right_panel.detail.product") %> <%= t("views.right_panel.detail.total") %> <%= t("views.right_panel.detail.item") %> <%= t("views.right_panel.detail.unit_price") %><%= t("views.right_panel.detail.revenue") %><%= t("views.right_panel.detail.total") %>
<%= sale.account_name %> <%= t("views.right_panel.detail.total_price_by") %> <%= sale.account_name %> - <% @totalByAccount.each do |account, total| %> - <% if sale.account_id == account %> - <%= number_with_precision(total, precision:precision.to_i,delimiter:delimiter) %> - <% grand_total += total %> - <% end %> - <% end %> -
 <%= sale.menu_category_name %> <%= sale.item_code rescue '-' %><%= sale.product_name rescue '-' %><%= sale.total_item rescue '-' %><%= number_with_precision(sale.unit_price , precision:precision.to_i,delimiter:delimiter) rescue '-'%><%= number_with_precision(sale.grand_total , precision:precision.to_i,delimiter:delimiter) rescue '-'%>
 Total <%= sale.account_name %> Qty <%= sub_qty %><%= t("views.right_panel.detail.sub_total") %><%= number_with_precision(sub_total , precision:precision.to_i,delimiter:delimiter)%>
 <%= t("views.right_panel.detail.total") %> <%= t("views.right_panel.detail.item") %><%= total_qty%><%= t("views.right_panel.detail.total") %> <%= t("views.right_panel.detail.amount") %><%= number_with_precision(grand_total , precision:precision.to_i,delimiter:delimiter)%>
 <%= sale.menu_category_name %> <%= sale.item_code rescue '-' %><%= sale.product_name rescue '-' %><%= sale.total_item rescue '-' %><%= number_with_precision(sale.unit_price , precision:precision.to_i,delimiter:delimiter) rescue '-'%><%= number_with_precision(sale.grand_total , precision:precision.to_i,delimiter:delimiter) rescue '-' %>
 Net Amount<%= number_with_precision(grand_total.to_f - @discount_data.to_f , precision:precision.to_i,delimiter:delimiter)%>Total<%= total_qty %><%= number_with_precision(grand_total , precision:precision.to_i,delimiter:delimiter) rescue '-' %>
@@ -175,118 +103,26 @@
\ No newline at end of file diff --git a/app/views/reports/product_sale/index.xls.erb b/app/views/reports/product_sale/index.xls.erb index f97edbb8..7123588c 100755 --- a/app/views/reports/product_sale/index.xls.erb +++ b/app/views/reports/product_sale/index.xls.erb @@ -5,17 +5,6 @@
- - - - <% if @shift_from %> - - <% if @shift_data.employee %> - <% cashier_name = !@shift_data.nil? ? @shift_data.employee.name : '-' %> - <% end %> - - - <% end %> @@ -23,149 +12,49 @@ - + <% unless @sale_data.blank? %> - <% acc_arr = Array.new %> - <% cate_arr = Array.new %> + <% acc_arr = Array.new %> + <% cate_arr = Array.new %> + <% grand_total = 0 %> + <% total_qty = 0 %> - <% sub_total = 0 %> - <% other_sub_total = 0 %> - <% count = 0 %> - <% total_price = 0 %> - <% cate_count = 0 %> - <% acc_count = 0 %> - <% grand_total = 0 %> - <% total_qty = 0 %> - <% total_amount = 0 %> - <% discount = 0 %> - <% total_item_foc = 0 %> - <% total_item_dis = 0 %> + <% @sale_data.each do |sale| %> + <% if sale.status_type != "Discount" && sale.status_type != "foc" + total_qty += sale.total_item + grand_total += sale.grand_total + end %> + <% if sale.status_type == "foc" && sale.price > 0 + total_qty += sale.total_item + grand_total += sale.grand_total + end %> - <% @sale_data.each do |sale| %> - - <% if sale.total_item > 0 - total_qty += sale.total_item - end %> - - <% if !acc_arr.include?(sale.account_id) %> - - - - + + <% if !cate_arr.include?(sale.menu_category_id) %> + + <% cate_arr.push(sale.menu_category_id) %> + <% else %> + + <% end %> + + + + + - <% acc_arr.push(sale.account_id) %> <% end %> - - <% if !cate_arr.include?(sale.menu_category_id) %> - - <% cate_arr.push(sale.menu_category_id) %> - <% else %> - - <% 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 %> - - - - - - <% if sale.status_type === "foc" - total_item_foc += sale.grand_total - end %> - - <% if sale.status_type === "Discount" - total_item_dis += sale.grand_total - end %> - <% sub_total = 0.0%> - <% count = 0%> - <% end %> - <% end %> - <% end %> - - <% end %> - - - - - - - <% @other_charges.each do |other| %> - <% if other.total_item > 0 - total_qty += other.total_item - end %> - <% grand_total +=other.grand_total%> - - - - - - - - - - - - <% other_sub_total += other.grand_total %> - - <% end %> - - - - - - - - - - - - - - <% end %> - - - - - - - - - - - - - - - - - - - - - + + + + + + + <% end %>
<%= t("views.right_panel.detail.from_date") %> : <%= @from.utc.getlocal.strftime("%Y-%b-%d") rescue '-' %> - <%= t("views.right_panel.detail.to_date") %> : <%= @to.utc.getlocal.strftime("%Y-%b-%d") rescue '-'%>
<%= t("views.right_panel.detail.shift_name") %> = <%= @shift_from %> - <%= @shift_to %> ( <%= cashier_name %> )
  <%= t("views.right_panel.header.menu_category") %><%= t("views.right_panel.detail.product") %> <%= t("views.right_panel.detail.total") %> <%= t("views.right_panel.detail.item") %> <%= t("views.right_panel.detail.unit_price") %><%= t("views.right_panel.detail.revenue") %><%= t("views.right_panel.detail.total") %>
<%= sale.account_name %> <%= t("views.right_panel.detail.total_price_by") %> <%= sale.account_name %> - <% @totalByAccount.each do |account, total| %> - <% if sale.account_id == account %> - <%= total %> - <% grand_total += total %> - <% end %> - <% end %> -  <%= sale.menu_category_name %> <%= sale.item_code rescue '-' %><%= sale.product_name rescue '-' %><%= sale.total_item rescue '-' %><%= sale.unit_price rescue '-' %><%= sale.grand_total rescue '-' %>
 <%= sale.menu_category_name %> <%= sale.item_code rescue '-' %><%= sale.product_name rescue '-' %><%= sale.total_item rescue '-' %><%= sale.unit_price rescue '-' %><%= sale.grand_total rescue '-' %>
 <%= t("views.right_panel.detail.sub_total") %><%= sub_total %>
Other Charges 
 Other Charges<%= other.item_code rescue '-' %><%= other.product_name rescue '-' %><%= other.total_item rescue '-' %><%= other.unit_price rescue '-' %><%= other.grand_total rescue '-' %>
 <%= t("views.right_panel.detail.sub_total") %><%= other_sub_total %>
 <%= t("views.right_panel.detail.total") %> <%= t("views.right_panel.detail.item") %><%= total_qty%><%= t("views.right_panel.detail.net_amount") %><%= grand_total%>
 <%= t("views.right_panel.detail.foc_item") %> <%= t("views.right_panel.detail.amount") %><%= total_item_foc %>
 <%= t("views.right_panel.detail.item_discount") %> <%= t("views.right_panel.detail.amount") %><%= total_item_dis %>
 <%= t("views.right_panel.detail.foc_sales") %><%= @foc_data %>
 <%= t("views.right_panel.detail.discount") %> <%= t("views.right_panel.detail.amount") %><%= @discount_data %>
Total<%= total_qty %><%= grand_total rescue '-' %>