From 40bce7f5981c643c7fb88032cc63726e9b591ade Mon Sep 17 00:00:00 2001 From: San Wai Lwin Date: Wed, 23 May 2018 13:57:45 +0630 Subject: [PATCH] Add Void button in Transaction/sales --- .../transactions/sales_controller.rb | 149 +++++ app/views/transactions/sales/show.html.erb | 533 ++++++++++-------- config/routes.rb | 1 + 3 files changed, 439 insertions(+), 244 deletions(-) diff --git a/app/controllers/transactions/sales_controller.rb b/app/controllers/transactions/sales_controller.rb index be370371..2a823888 100755 --- a/app/controllers/transactions/sales_controller.rb +++ b/app/controllers/transactions/sales_controller.rb @@ -236,6 +236,155 @@ class Transactions::SalesController < ApplicationController redirect_to root_path end end + + def overall_void + sale_id = params[:sale_id] + remark = params[:remark] + order_source = params[:type] #tax profile source + access_code = params[:access_code] + if Sale.exists?(sale_id) + sale = Sale.find_by_sale_id(sale_id) + + if sale.discount_type == "member_discount" + sale.update_attributes(total_discount: 0) + sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source) + end + + # update count for shift sale + if(sale.sale_status == "completed") + if sale.shift_sale_id != nil + shift = ShiftSale.find(sale.shift_sale_id) + shift.calculate(sale_id, "void") + end + else + # void before sale payment complete + if sale.shift_sale_id != nil + shift = ShiftSale.find(sale.shift_sale_id) + shift.total_void = shift.total_void + sale.grand_total + shift.save + end + end + + sale.rounding_adjustment = 0.0 + sale.payment_status = 'void' + sale.sale_status = 'void' + sale.save + + # No Need + # bookings = sale.bookings + # bookings.each do |booking| + # orders = booking.orders + # orders.each do |order| + # # order.status = 'void' + # end + # end + + if sale.bookings[0].dining_facility_id.to_i > 0 + table_avaliable = true + table_count = 0 + table = sale.bookings[0].dining_facility + table.bookings.each do |booking| + if booking.booking_status != 'moved' + if booking.sale_id + if booking.sale.sale_status != 'completed' && booking.sale.sale_status != 'void' && booking.sale.sale_status != 'spoile' && booking.sale.sale_status != 'waste' + table_avaliable = false + table_count += 1 + else + table_avaliable = true + end + else + table_avaliable = false + table_count += 1 + end + end + end + + if table_avaliable && table_count == 0 + table.status = 'available' + table.save + end + else + table = nil + end + + # FOr Sale Audit + action_by = current_user.name + if access_code != "null" && current_user.role == "cashier" + action_by = Employee.find_by_emp_id(access_code).name + end + + # remark = "Void Sale ID #{sale_id} | Receipt No #{sale.receipt_no} | Receipt No #{sale.receipt_no} | Table ->#{table.name}" + sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, action_by,remark,"SALEVOID" ) + + # For Print + + member_info = nil + rebate_amount = nil + current_balance = nil + + # For Cashier by Zone + bookings = Booking.where("sale_id='#{sale_id}'") + if bookings.count > 1 + # for Multiple Booking + if bookings[0].dining_facility_id.to_i>0 + table = DiningFacility.find(bookings[0].dining_facility_id) + end + end + + if bookings[0].dining_facility_id.to_i > 0 + cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id) + cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id) + else + shift = ShiftSale.find(sale.shift_sale_id) + cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id) + end + + + # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server + unique_code = "ReceiptBillPdf" + customer= Customer.find(sale.customer_id) + + #shop detail + shop_details = Shop.find(1) + # get member information + rebate = MembershipSetting.find_by_rebate(1) + if customer.membership_id != nil && rebate + member_info = Customer.get_member_account(customer) + rebate_amount = Customer.get_membership_transactions(customer,sale.receipt_no) + # current_balance = SaleAudit.paymal_search(sale_id) + current_balance = 0 + end + + # get printer info + print_settings=PrintSetting.find_by_unique_code(unique_code) + # Calculate Food and Beverage Total + item_price_by_accounts = SaleItem.calculate_price_by_accounts(sale.sale_items) + discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(sale.sale_items) + + printer = Printer::ReceiptPrinter.new(print_settings) + filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings,cashier_terminal,sale.sale_items,sale,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "VOID",current_balance,nil) + result = { + :filepath => filename, + :printer_model => print_settings.brand_name, + :printer_url => print_settings.api_settings + } + + # Mobile Print + render :json => result.to_json + # end + + #end print + + # update complete order items in oqs + SaleOrder.where("sale_id = '#{ sale_id }'").find_each do |sodr| + AssignedOrderItem.where("order_id = '#{ sodr.order_id }'").find_each do |aoi| + aoi.delivery_status = 1 + aoi.save + end + end + end + end + private # Use callbacks to share common setup or constraints between actions. diff --git a/app/views/transactions/sales/show.html.erb b/app/views/transactions/sales/show.html.erb index 049ca8c9..fd98e214 100755 --- a/app/views/transactions/sales/show.html.erb +++ b/app/views/transactions/sales/show.html.erb @@ -1,4 +1,3 @@ -
-
- +
+ - - - + + + -
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - <% @sale.sale_items.each do |s| %> - - - - - - - - - - <% end %> - - - - - - - - - - - <% @sale.sale_taxes.each do |r|%> - - - - - - <% end %> - - - - - - - - - - - - - <% @sale_receivables.each do |r|%> - - - - - - - <% end %> - - - - - - - - - -
<%= t("views.right_panel.detail.receipt_date") %><%= t("views.right_panel.detail.receipt_no") %><%= t :cashier %><%= t("views.right_panel.detail.sales_status") %><%= t("views.right_panel.detail.receipt_generated_at") %>
<%= @sale.receipt_date.strftime("%d-%M-%Y") %><%= @sale.receipt_no %><%= @sale.cashier_name rescue '-' %> <%= @sale.sale_status %> <%= @sale.requested_at.strftime("%m-%d-%Y %H:%M %p") %>
<%= t :sale %> <%= t("views.right_panel.detail.item_txt") %> <%= t("views.right_panel.detail.name_txt2") %><%= t("views.right_panel.detail.qty") %><%= t("views.right_panel.detail.unit_price") %><%= t("views.right_panel.detail.total_price") %><%= t("views.right_panel.detail.created_at") %><%= t("views.right_panel.detail.remark") %>
<%=s.product_name rescue ' '%><%=s.qty rescue ' '%><%= number_with_precision(s.unit_price, :precision => 2, :delimiter => ',') rescue ' '%><%= number_with_precision(s.price, :precision => 2, :delimiter => ',') rescue ' '%><%=l s.created_at.utc.getlocal , :format => :short rescue ' ' %><%=s.remark rescue ' '%>
<%= t("views.right_panel.detail.total") %><%= number_with_precision(@sale.total_amount, :precision => 2, :delimiter => ',') rescue ' '%>
<%= t("views.right_panel.detail.discount") %><%= number_with_precision(@sale.total_discount, :precision => 2, :delimiter => ',') rescue ' '%>
<%= r.tax_name %> <%= number_with_precision(r.tax_payable_amount, :precision => 2, :delimiter => ',') rescue ' '%>
<%= t("views.right_panel.detail.grand_total") %><%= number_with_precision(@sale.grand_total, :precision => 2, :delimiter => ',') rescue ' '%>
 
<%= t("views.right_panel.detail.total_pay_amount") %><%= number_with_precision(@sale.amount_received, :precision => 2, :delimiter => ',') rescue ' '%>
<%= r.payment_method.capitalize rescue ' '%> Payment<%= number_with_precision(r.payment_amount, :precision => 2, :delimiter => ',') rescue ' '%> -
<%= t("views.right_panel.detail.change") %><%= number_with_precision(@sale.amount_changed, :precision => 2, :delimiter => ',') rescue ' '%>
- -
-
- -
-
- - - - - - - - - - - - - - - - <% @order_items.each do |order_item| %> - - - - - - - - - - - <% end %> - -
<%= t("views.right_panel.detail.order_id") %><%= t("views.right_panel.header.menu_item") %><%= t("views.right_panel.detail.qty") %><%= t("views.right_panel.detail.unit_price") %><%= t("views.right_panel.detail.option") %><%= t("views.right_panel.detail.status") %><%= t("views.right_panel.detail.waiter") %><%= t("views.right_panel.detail.created_at") %>
<%= link_to order_item.order_id, transactions_order_path(order_item.order_id) %><%= %><%= order_item.item_name %><%= order_item.qty %><%= order_item.price %><%= order_item.options %><%= order_item.order_item_status %><%= order_item.item_order_by %> <%= order_item.created_at.strftime("%d-%m-%y %I:%M %p") %>
-
-
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - <% if @customer.membership_id %> - - - - - - - - - - - - - - - <% - if @response["status"] == true %> - <% @response["data"].each do |transaction| %> - - - - - - - - - - - <% end %> - <% end %> - <% end %> - -
<%= t("views.right_panel.detail.card_no") %><%= t("views.right_panel.detail.name") %><%= t("views.right_panel.detail.company") %><%= t("views.right_panel.detail.contact_no") %><%= t("views.right_panel.detail.email") %><%= t("views.right_panel.detail.nrc_passport_no") %><%= t("views.right_panel.detail.address") %><%= t("views.right_panel.detail.dob") %>
<%= @customer.card_no rescue '-'%><%= @customer.name %><%= @customer.company rescue '-' %><%= @customer.contact_no %><%= @customer.email %><%= @customer.nrc_no %><%= @customer.address%><%= @customer.date_of_birth %>
<%= t("views.right_panel.detail.membership_transactions") %>
<%= t("views.right_panel.detail.date") %><%= t("views.right_panel.detail.redeem") %><%= t("views.right_panel.detail.rebate") %><%= t("views.right_panel.detail.balance") %><%= t("views.right_panel.detail.from_account") %><%= t("views.right_panel.detail.status") %><%= t("views.right_panel.detail.receipt_no") %>
<%= transaction["date"]%><%= transaction["redeem"]%><%= transaction["rebate"] %><%= transaction["balance"] %><%= transaction["account_status"] %><%= transaction["status"] %><%= transaction["receipt_no"] %>
-
-
- -
-
-
- - - - - - - - - - - - - <% @sale_audits.each do |audit| %> - - - - - - - - <% end %> - - -
<%= t("views.right_panel.detail.action") %><%= t("views.right_panel.detail.action_at") %><%= t("views.right_panel.detail.approved_at") %><%= t("views.right_panel.detail.remark") %>
<%= audit.action%><%= audit.action_at.strftime("%m-%d-%Y %H:%M %p")%><%= audit.approved_by%><%= audit.remark%>
-
-
+
+
+
+ + + + + + + + + <% if @sale["sale_status"] == "completed" %> + + + + + + + + + + + + <% @sale.sale_items.each do |s| %> + + + + + + + + + <% end %> + + + + + + + + + + + <% @sale.sale_taxes.each do |r|%> + + + + + + <% end %> + + + + + + + + + + + + <% @sale_receivables.each do |r|%> + + + + + + <% end %> + + + + + + +
<%= t("views.right_panel.detail.receipt_date") %><%= t("views.right_panel.detail.receipt_no") %><%= t :cashier %><%= t("views.right_panel.detail.sales_status") %><%= t("views.right_panel.detail.receipt_generated_at") %> + <%= @sale.sale_status %> <%= @sale.requested_at.strftime("%m-%d-%Y %H:%M %p") %>
<%= t :sale %> <%= t("views.right_panel.detail.item_txt") %> <%= t("views.right_panel.detail.name_txt2") %><%= t("views.right_panel.detail.qty") %><%= t("views.right_panel.detail.unit_price") %><%= t("views.right_panel.detail.total_price") %><%= t("views.right_panel.detail.created_at") %><%= t("views.right_panel.detail.remark") %>
<%=s.product_name rescue ' '%><%=s.qty rescue ' '%><%= number_with_precision(s.unit_price, :precision => 2, :delimiter => ',') rescue ' '%><%= number_with_precision(s.price, :precision => 2, :delimiter => ',') rescue ' '%><%=l s.created_at.utc.getlocal , :format => :short rescue ' ' %><%=s.remark rescue ' '%>
<%= t("views.right_panel.detail.total") %><%= number_with_precision(@sale.total_amount, :precision => 2, :delimiter => ',') rescue ' '%>
<%= t("views.right_panel.detail.discount") %><%= number_with_precision(@sale.total_discount, :precision => 2, :delimiter => ',') rescue ' '%>
<%= r.tax_name %> <%= number_with_precision(r.tax_payable_amount, :precision => 2, :delimiter => ',') rescue ' '%>
<%= t("views.right_panel.detail.grand_total") %><%= number_with_precision(@sale.grand_total, :precision => 2, :delimiter => ',') rescue ' '%>
 
<%= t("views.right_panel.detail.total_pay_amount") %><%= number_with_precision(@sale.amount_received, :precision => 2, :delimiter => ',') rescue ' '%>
<%= r.payment_method.capitalize rescue ' '%> Payment<%= number_with_precision(r.payment_amount, :precision => 2, :delimiter => ',') rescue ' '%>
<%= t("views.right_panel.detail.change") %><%= number_with_precision(@sale.amount_changed, :precision => 2, :delimiter => ',') rescue ' '%>
+
+
+
+ + + + + + + + + + + + + + + <% @order_items.each do |order_item| %> + + + + + + + + + + + <% end %> + +
<%= t("views.right_panel.detail.order_id") %><%= t("views.right_panel.header.menu_item") %><%= t("views.right_panel.detail.qty") %><%= t("views.right_panel.detail.unit_price") %><%= t("views.right_panel.detail.option") %><%= t("views.right_panel.detail.status") %><%= t("views.right_panel.detail.waiter") %><%= t("views.right_panel.detail.created_at") %>
<%= link_to order_item.order_id, transactions_order_path(order_item.order_id) %><%= %><%= order_item.item_name %><%= order_item.qty %><%= order_item.price %><%= order_item.options %><%= order_item.order_item_status %><%= order_item.item_order_by %> <%= order_item.created_at.strftime("%d-%m-%y %I:%M %p") %>
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + <% if @customer.membership_id %> + + + + + + + + + + + + + + + <% if @response["status"] == true %> + <% @response["data"].each do |transaction| %> + + + + + + + + + + + <% end %> + <% end %> + <% end %> + +
<%= t("views.right_panel.detail.card_no") %><%= t("views.right_panel.detail.name") %><%= t("views.right_panel.detail.company") %><%= t("views.right_panel.detail.contact_no") %><%= t("views.right_panel.detail.email") %><%= t("views.right_panel.detail.nrc_passport_no") %><%= t("views.right_panel.detail.address") %><%= t("views.right_panel.detail.dob") %>
<%= @customer.card_no rescue '-'%><%= @customer.name %><%= @customer.company rescue '-' %><%= @customer.contact_no %><%= @customer.email %><%= @customer.nrc_no %><%= @customer.address%><%= @customer.date_of_birth %>
<%= t("views.right_panel.detail.membership_transactions") %>
<%= t("views.right_panel.detail.date") %><%= t("views.right_panel.detail.redeem") %><%= t("views.right_panel.detail.rebate") %><%= t("views.right_panel.detail.balance") %><%= t("views.right_panel.detail.from_account") %><%= t("views.right_panel.detail.status") %><%= t("views.right_panel.detail.receipt_no") %>
<%= transaction["date"]%><%= transaction["redeem"]%><%= transaction["rebate"] %><%= transaction["balance"] %><%= transaction["account_status"] %><%= transaction["status"] %><%= transaction["receipt_no"] %>
+
+
+ +
+
+
+ + + + + + + + + + + <% @sale_audits.each do |audit| %> + + + + + + + <% end %> + +
<%= t("views.right_panel.detail.action") %><%= t("views.right_panel.detail.action_at") %><%= t("views.right_panel.detail.approved_at") %><%= t("views.right_panel.detail.remark") %>
<%= audit.action%><%= audit.action_at.strftime("%m-%d-%Y %H:%M %p")%><%= audit.approved_by%><%= audit.remark%>
+
+
- - +
+ + + + + diff --git a/config/routes.rb b/config/routes.rb index 77e26bbb..7f776da0 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -431,6 +431,7 @@ scope "(:locale)", locale: /en|mm/ do get "/sales/:sale_id/manual_complete_sale" => "manual_sales#manual_complete_sale", :as => "manual_complete_sale" get "/sales/:sale_id/void" => "manual_sales#void", :as => "void" post "sales/:sale_id/manual_void_sale", to: "manual_sales#manual_void_sale", :as => "manual_void_sale" + post "sales/:sale_id/:type/void" => "sales#overall_void" end #--------- Reports Controller Sections ------------#