From 03753d1487fc1a2e095b5364e6639ddbda392a99 Mon Sep 17 00:00:00 2001 From: Aung Myo Date: Thu, 11 Oct 2018 17:39:21 +0630 Subject: [PATCH 1/7] upudate add to existing order --- app/controllers/origami/sales_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/origami/sales_controller.rb b/app/controllers/origami/sales_controller.rb index 2662bb16..0f312910 100755 --- a/app/controllers/origami/sales_controller.rb +++ b/app/controllers/origami/sales_controller.rb @@ -29,7 +29,7 @@ class Origami::SalesController < BaseOrigamiController sale_data = [] table = DiningFacility.find(dining) existing_booking = Booking.find_by_sale_id(sale_id) - table.bookings.each do |booking| + table.bookings.active.each do |booking| # if !booking.checkout_at.nil? # existing_booking.update_attributes(checkout_at: checkout_at) # end From 11b4bdc8041043b0d23aaf81f294764b2b36b393 Mon Sep 17 00:00:00 2001 From: phyusin Date: Fri, 12 Oct 2018 15:18:23 +0630 Subject: [PATCH 2/7] api for cashier app --- .../api/authenticate_controller.rb | 27 ++++++- app/controllers/api/bill_controller.rb | 67 ++++++++++++++++ app/controllers/api/payments_controller.rb | 76 ++++++++++++++++++- app/controllers/api/shifts_controller.rb | 57 ++++++++++++++ app/controllers/home_controller.rb | 2 +- .../origami/customers_controller.rb | 2 +- .../origami/request_bills_controller.rb | 22 +++--- app/models/cashier_terminal.rb | 1 + app/models/customer.rb | 2 +- app/models/sale.rb | 22 +++--- config/routes.rb | 7 ++ 11 files changed, 258 insertions(+), 27 deletions(-) create mode 100644 app/controllers/api/shifts_controller.rb diff --git a/app/controllers/api/authenticate_controller.rb b/app/controllers/api/authenticate_controller.rb index 8fbfda5b..394c0a74 100755 --- a/app/controllers/api/authenticate_controller.rb +++ b/app/controllers/api/authenticate_controller.rb @@ -14,7 +14,32 @@ class Api::AuthenticateController < Api::ApiController end else render json: JSON.generate({:status => false, :error_message => "Input Parameters missing."}) + end + end + def create_cashier + emp_id = params[:emp_id] + password = params[:password] + + if emp_id && password + @employee = Employee.login(emp_id, password) + if @employee && @employee.role == "cashier" + if @employee.is_active + shift = ShiftSale.current_open_shift(@employee.id) + if !shift.nil? + render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role}) + else + terminals = CashierTerminal.available.is_active + render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role, :error_message => "No current shift open for this employee!", :terminals => terminals.to_json}) + end + else + render json: JSON.generate({:status => false, :error_message => "This employee is not active!"}) + end + else + render json: JSON.generate({:status => false, :error_message => "Bad Emp_ID or Password."}) + end + else + render json: JSON.generate({:status => false, :error_message => "Input Parameters missing."}) end end @@ -22,10 +47,8 @@ class Api::AuthenticateController < Api::ApiController logout_status = Employee.logout(params[:session_token]) if logout_status render json: JSON.generate({:status => true}) - else render json: JSON.generate({:status => false, :error_message => "Session Token Invalid or Missing"}) - end end diff --git a/app/controllers/api/bill_controller.rb b/app/controllers/api/bill_controller.rb index c56f2d09..d42e1da4 100755 --- a/app/controllers/api/bill_controller.rb +++ b/app/controllers/api/bill_controller.rb @@ -123,6 +123,73 @@ class Api::BillController < Api::ApiController # printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer.name, item_price_by_accounts, member_info, shop_details) end + def request_bill + puts "order items" + puts params[:order_items] + + if params[:order_items] + is_extra_time = false + extra_time = '' + + # params[:order_items].each { |i| + # i["item_instance_code"] = i["item_instance_code"].downcase.to_s + # if i["item_instance_code"].include? "ext" + # is_extra_time = true + # arr_exts = i["item_instance_code"].split("_") + # if arr_exts[1].match(/^(\d)+$/) + # time = arr_exts[1].to_i*60*i["quantity"].to_i + # extra_time = Time.at(time) + # end + # end + # } + + @order = Order.new + @order.source = "emenu" + @order.order_type = "Takeaway" + @order.customer_id = "CUS-000000000002" # for no customer id from mobile + @order.items = params[:order_items] + @order.guest = params[:guest_info] + @order.table_id = params[:table_id] # this is dining facilities's id + @order.new_booking = true + @order.waiters = current_login_employee.name + @order.employee_name = current_login_employee.name + + @order.is_extra_time = is_extra_time + @order.extra_time = extra_time + + @status, @booking = @order.generate + + if @status && @booking + shift = ShiftSale.current_open_shift(current_login_employee.id) + if !shift.nil? + cashier = Employee.find(shift.employee_id) + if (@booking.booking_id) + booking_order = BookingOrder.find_by_booking_id(@booking.booking_id) + order = Order.find(booking_order.order_id) + + if @booking.sale_id.nil? + @sale = Sale.new + @status, @sale_id = @sale.generate_invoice_from_booking(@booking.booking_id, current_login_employee, cashier, order.source) + @sale_data = Sale.find_by_sale_id(@sale_id) + else + @status = true + @sale_id = @booking.sale_id + @sale_data = Sale.find_by_sale_id(@sale_id) + end + end + # Promotion.promo_activate(@sale) + render json: JSON.generate({:status => true, :sale_id => @sale_id, :sale_data => @sale_data.to_json}) + else + render json: JSON.generate({:status => false, :error_message => "No Current Open Shift!"}) + end + else + render json: JSON.generate({:status => false, :error_message => "Create order failed, some error occurred!"}) + end + else + render json: JSON.generate({:status => false, :error_message => "Parameters missing!"}) + end + end + private def bill_params params.permit(:booking_id, :order_id) diff --git a/app/controllers/api/payments_controller.rb b/app/controllers/api/payments_controller.rb index 53c1fba2..d7be8ee0 100755 --- a/app/controllers/api/payments_controller.rb +++ b/app/controllers/api/payments_controller.rb @@ -1,4 +1,4 @@ -class Api::PaymentsController < ActionController::API +class Api::PaymentsController < Api::ApiController #Payment by Invoice ID @@ -18,9 +18,81 @@ class Api::PaymentsController < ActionController::API # Invoice No | Payment ID | External params [] (* third party references and status) # def update - end + #create paymal payment for cashier app + def paymal_payment + if params[:sale_id] && params[:card_no] + sale = Sale.find_by_sale_id(params[:sale_id]) + if !sale.nil? + if sale.sale_status == "new" + if !params[:card_no].empty? + @status, @message = send_account_paymal(sale.grand_total, params[:card_no], sale.receipt_no) + if @status + sale_payment = SalePayment.new + status, @sale, @membership_data = sale_payment.process_payment(sale, current_login_employee, sale.grand_total, "paymal",params[:card_no]) + if status == true && @membership_data["status"] == true + #card_balance amount for Paymal payment + card_balance_amount = SaleAudit.getCardBalanceAmount(sale_id) + + render json: JSON.generate({:status => true, :balance_amount => card_balance_amount, :message => "Payment successfully."}) + else + render json: JSON.generate({:status => false, :error_message => @membership_data["message"]}) + end + else + render json: JSON.generate({:status => false, :error_message => @message}) + end + else + render json: JSON.generate({:status => false, :error_message => "Card No is required!"}) + end + else + render json: JSON.generate({:status => false, :error_message => "Already paid for '#{params[:sale_id]}'!"}) + end + else + render json: JSON.generate({:status => false, :error_message => "There is no sale for '#{params[:sale_id]}'!"}) + end + else + render json: JSON.generate({:status => false, :error_message => "Parameters missing!"}) + end + end + + def send_account_paymal(amount, account_no, receipt_no) + sale = Sale.find_by_receipt_no(receipt_no) + @out = [] + action_by = current_login_employee.name + @status = true + @message = "" + membership_setting = MembershipSetting.find_by_membership_type("paypar_url") + if membership_setting.gateway_url + member_actions =MembershipAction.find_by_membership_type("get_account_balance") + if member_actions.gateway_url + @campaign_type_id = nil + url = membership_setting.gateway_url.to_s + member_actions.gateway_url.to_s + merchant_uid= member_actions.merchant_account_id + auth_token = member_actions.auth_token.to_s + membership_data = SalePayment.get_paypar_account_data(url,membership_setting.auth_token,merchant_uid,auth_token,account_no,amount,receipt_no) + if membership_data["status"]==true + remark = "Payment by account no Receipt No #{sale.receipt_no} | Sale ID #{sale.sale_id} | Transaction ref: #{membership_data[:transaction_ref]} | Reload amount #{membership_data[:reload_amount]} | Old Balance Amount #{membership_data[:old_balance_amount]} | DateTime : #{membership_data[:date]}" + sale_audit = SaleAudit.record_audit_for_edit(sale.sale_id,current_login_employee.name, current_login_employee.name,remark,"PAYBYACCOUNT" ) + else + remark = "Payment by account no Receipt No #{sale.receipt_no} | Sale ID #{sale.sale_id} | Remark : #{membership_data[:message]}" + sale_audit = SaleAudit.record_audit_for_edit(sale.sale_id,current_login_employee.name, current_login_employee.name,remark,"PAYBYACCOUNT" ) + end + @out = membership_data + + @status = membership_data["status"] + @message = membership_data["message"] + end + else + @status = false + @message = "No gateway url!" + end + + return @status, @message + end + + #create paymal payment for cashier app + private def handle_payment(sale_payment) diff --git a/app/controllers/api/shifts_controller.rb b/app/controllers/api/shifts_controller.rb new file mode 100644 index 00000000..754d2375 --- /dev/null +++ b/app/controllers/api/shifts_controller.rb @@ -0,0 +1,57 @@ +class Api::ShiftsController < Api::ApiController + # skip_before_action :authenticate + + + def create + opening_balance = 0 + cashier_terminal_param = params[:cashier_terminal] + + # Multiple Cashier + cashier_terminal = CashierTerminal.find(cashier_terminal_param) + if cashier_terminal.is_currently_login + render json: JSON.generate({:status => false, :error_message => "Cashier Terminal already signin!"}) + else + # Update Cashier Terminal + cashier_terminal.is_currently_login = 1 + cashier_terminal.save + + @shift_sale = ShiftSale.new + if @shift_sale.create(opening_balance,cashier_terminal_param, current_login_employee) + render json: JSON.generate({:status => true, :message => "Cashier Terminal successfully signin.", :shift => @shift_sale.to_json}) + else + render json: JSON.generate({:status => false, :error_message => "Some error occurred!"}) + end + end + end + + def update + closing_balance = 0 + shift_id = params[:shift_id] + + @shift = ShiftSale.find_by_id(shift_id) + if !@shift.nil? + if @shift.shift_closed_at.nil? + @shift.shift_closed_at = DateTime.now.utc + @shift.closing_balance = closing_balance.to_f + @shift.save + + # Multiple Cashier + cashier_terminal = @shift.cashier_terminal + cashier_terminal.is_currently_login = 0 + cashier_terminal.save + + logout_status = Employee.logout(params[:session_token]) + if logout_status + render json: JSON.generate({:status => true, :message => "Shift successfully close."}) + else + render json: JSON.generate({:status => false, :error_message => "Session Token Invalid or Missing"}) + end + else + render json: JSON.generate({:status => false, :error_message => "Shift already close!"}) + end + else + render json: JSON.generate({:status => false, :error_message => "Wrong shift!"}) + end + end +end + diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 19bfb4a3..ba1292a2 100755 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -217,7 +217,7 @@ class HomeController < ApplicationController # redirect_to origami_root_path else redirect_to new_origami_shift_path - end + end elsif employee.role == "manager" redirect_to dashboard_path elsif employee.role == "waiter" diff --git a/app/controllers/origami/customers_controller.rb b/app/controllers/origami/customers_controller.rb index 94f4f1ea..6f24cf2b 100644 --- a/app/controllers/origami/customers_controller.rb +++ b/app/controllers/origami/customers_controller.rb @@ -166,7 +166,7 @@ class Origami::CustomersController < BaseOrigamiController receipt_no = params[:receipt_no] sale = Sale.find_by_receipt_no(receipt_no) @out = [] - action_by = current_user.id + action_by = current_user.name membership_setting = MembershipSetting.find_by_membership_type("paypar_url") if membership_setting.gateway_url member_actions =MembershipAction.find_by_membership_type("get_account_balance") diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb index 617e5c35..0bae60f3 100755 --- a/app/controllers/origami/request_bills_controller.rb +++ b/app/controllers/origami/request_bills_controller.rb @@ -72,19 +72,21 @@ class Origami::RequestBillsController < ApplicationController #check checkInOut pdf print check_booking = Booking.find_by_sale_id(@sale_id) checkout_time = Lookup.collection_of('checkout_time') - terminal = DiningFacility.find_by_id(check_booking.dining_facility_id) - cashier_terminal = CashierTerminal.find_by_id(terminal.zone_id) + if !check_booking.dining_facility_id.nil? + terminal = DiningFacility.find_by_id(check_booking.dining_facility_id) + cashier_terminal = CashierTerminal.find_by_id(terminal.zone_id) - if (!checkout_time.empty?) && (ENV["SERVER_MODE"] != "cloud") #no print in cloud server - unique_code = "CheckInOutPdf" - printer = PrintSetting.find_by_unique_code(unique_code) + if (!checkout_time.empty?) && (ENV["SERVER_MODE"] != "cloud") #no print in cloud server + unique_code = "CheckInOutPdf" + printer = PrintSetting.find_by_unique_code(unique_code) - # print when complete click - order_queue_printer = Printer::OrderQueuePrinter.new(printer) + # print when complete click + order_queue_printer = Printer::OrderQueuePrinter.new(printer) - if !printer.nil? - order_queue_printer.print_check_in_out(printer, cashier_terminal, check_booking, table) - end + if !printer.nil? + order_queue_printer.print_check_in_out(printer, cashier_terminal, check_booking, table) + end + end end end else diff --git a/app/models/cashier_terminal.rb b/app/models/cashier_terminal.rb index bb136117..d8e38c5f 100755 --- a/app/models/cashier_terminal.rb +++ b/app/models/cashier_terminal.rb @@ -3,6 +3,7 @@ class CashierTerminal < ApplicationRecord has_many :zones, through: :cashier_terminal_by_zones scope :available, -> {where(is_currently_login: false)} + scope :is_active, -> {where(is_active: true)} # validations validates_presence_of :name, :printer_name diff --git a/app/models/customer.rb b/app/models/customer.rb index 55a41722..3c72d3bb 100755 --- a/app/models/customer.rb +++ b/app/models/customer.rb @@ -336,7 +336,7 @@ class Customer < ApplicationRecord def self.search(search) if search # find(:all, :conditions => ['name LIKE ? OR contact_no LIKE ?', "%#{search}%", "%#{search}%"]) - where("name LIKE ? OR customer_type OR contact_no LIKE ? OR card_no LIKE ? OR DATE_FORMAT(date_of_birth,'%Y-%m-%d') LIKE ? OR nrc_no LIKE ? OR gender LIKE ? OR paypar_account_no ='#{search}'", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%") + where("name LIKE ? OR customer_type LIKE ? OR contact_no LIKE ? OR card_no LIKE ? OR DATE_FORMAT(date_of_birth,'%Y-%m-%d') LIKE ? OR nrc_no LIKE ? OR gender LIKE ? OR paypar_account_no ='#{search}'", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%") else find(:all) end diff --git a/app/models/sale.rb b/app/models/sale.rb index c772516d..eab54645 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -88,16 +88,18 @@ class Sale < ApplicationRecord # set cashier if order_source.downcase == "emenu" - table = DiningFacility.find(booking.dining_facility_id) - cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id) - shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and cashier_terminal_id = #{cashier_zone.cashier_terminal_id}").first - #for multiple zone with terminal - if shift.nil? - multiple_zone = CashierTerminalByZone.where("zone_id = #{table.zone_id}") - multiple_zone.each do |zone| - shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and cashier_terminal_id = #{zone.cashier_terminal_id}").first - if !shift.nil? then - break + if !booking.dining_facility_id.nil? + table = DiningFacility.find(booking.dining_facility_id) + cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id) + shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and cashier_terminal_id = #{cashier_zone.cashier_terminal_id}").first + #for multiple zone with terminal + if shift.nil? + multiple_zone = CashierTerminalByZone.where("zone_id = #{table.zone_id}") + multiple_zone.each do |zone| + shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and cashier_terminal_id = #{zone.cashier_terminal_id}").first + if !shift.nil? then + break + end end end end diff --git a/config/routes.rb b/config/routes.rb index 4c24cd22..3e6edf5e 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -93,6 +93,13 @@ scope "(:locale)", locale: /en|mm/ do end post "sound_effect" => "sound_effect#sound_effect" + + #API for cashier app + post 'authenticate_cashier' => "authenticate#create_cashier" + post "shifts/new" => "shifts#create" + post "shifts/close" => "shifts#update" + post "request_bill" => "bill#request_bill" + post "paymal_payment" => "payments#paymal_payment" end #--------- Cashier ------------# From f31bebdda746f4a630dc4994f85372b36a3d34df Mon Sep 17 00:00:00 2001 From: phyusin Date: Fri, 12 Oct 2018 16:33:44 +0630 Subject: [PATCH 3/7] change varchar to text for sale_audits --- db/migrate/20170403174111_create_sale_audits.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/db/migrate/20170403174111_create_sale_audits.rb b/db/migrate/20170403174111_create_sale_audits.rb index 7e7f0b8c..eadba565 100755 --- a/db/migrate/20170403174111_create_sale_audits.rb +++ b/db/migrate/20170403174111_create_sale_audits.rb @@ -9,9 +9,11 @@ class CreateSaleAudits < ActiveRecord::Migration[5.1] t.string :action_by, :null => false t.string :approved_by, :null => true t.datetime :approved_at, :null => true - t.string :remark, :index => true + t.text :remark t.timestamps end - add_index :sale_audits, [:sale_id, :action, :action_at, :remark] + + add_index :sale_audits, :remark, remark: 'remark', type: :fulltext + add_index :sale_audits, [:sale_id, :action, :action_at] end end From e4daecfec72a356b30cc2ca49fe0dacfea2643d9 Mon Sep 17 00:00:00 2001 From: phyusin Date: Mon, 15 Oct 2018 13:05:18 +0630 Subject: [PATCH 4/7] remove item data in inventory --- app/models/inventory_definition.rb | 2 +- app/views/origami/pending_order/show.html.erb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/models/inventory_definition.rb b/app/models/inventory_definition.rb index 13d295a1..1a9dec8f 100755 --- a/app/models/inventory_definition.rb +++ b/app/models/inventory_definition.rb @@ -57,7 +57,7 @@ class InventoryDefinition < ApplicationRecord data.qty = extra_qty StockJournal.add_to_journal(data, 0, "out of stock", inventory_definition) else - StockJournal.add_to_journal(item_data, stock.balance, "out of stock", inventory_definition) + StockJournal.add_to_journal(item, stock.balance, "out of stock", inventory_definition) end end end diff --git a/app/views/origami/pending_order/show.html.erb b/app/views/origami/pending_order/show.html.erb index b4f71e8d..73ee0040 100644 --- a/app/views/origami/pending_order/show.html.erb +++ b/app/views/origami/pending_order/show.html.erb @@ -282,14 +282,14 @@ $(document).ready(function(){ $('#request_bills').click(function () { var order_id = $('#save_order_id').val(); var ajax_url = "/origami/" +order_id+ "/request_bills"; - console.log(ajax_url) + console.log(ajax_url); $.ajax({ type: "GET", url: ajax_url, // data: 'order_id='+ order_id, success: function (result) { if (!result.status) { - swal("Information!", result.error_message); + swal ( "Oops" , result.error_message , "warning" ); } else { window.location.href = '/origami/sale/'+result.data+'/'+cashier_type+'/payment'; From 94debfdde9f1ce8ac9b54578088ba92cab058b98 Mon Sep 17 00:00:00 2001 From: phyusin Date: Tue, 16 Oct 2018 14:35:54 +0630 Subject: [PATCH 5/7] change json format and void api --- .../api/authenticate_controller.rb | 2 +- app/controllers/api/bill_controller.rb | 2 +- app/controllers/api/shifts_controller.rb | 2 +- app/controllers/api/void_controller.rb | 42 +++++++++++++++++++ config/routes.rb | 1 + 5 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 app/controllers/api/void_controller.rb diff --git a/app/controllers/api/authenticate_controller.rb b/app/controllers/api/authenticate_controller.rb index 394c0a74..dc14e478 100755 --- a/app/controllers/api/authenticate_controller.rb +++ b/app/controllers/api/authenticate_controller.rb @@ -30,7 +30,7 @@ class Api::AuthenticateController < Api::ApiController render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role}) else terminals = CashierTerminal.available.is_active - render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role, :error_message => "No current shift open for this employee!", :terminals => terminals.to_json}) + render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role, :error_message => "No current shift open for this employee!", :terminals => ActiveSupport::JSON.encode(terminals)}) end else render json: JSON.generate({:status => false, :error_message => "This employee is not active!"}) diff --git a/app/controllers/api/bill_controller.rb b/app/controllers/api/bill_controller.rb index d42e1da4..aa152aac 100755 --- a/app/controllers/api/bill_controller.rb +++ b/app/controllers/api/bill_controller.rb @@ -178,7 +178,7 @@ class Api::BillController < Api::ApiController end end # Promotion.promo_activate(@sale) - render json: JSON.generate({:status => true, :sale_id => @sale_id, :sale_data => @sale_data.to_json}) + render json: JSON.generate({:status => true, :sale_id => @sale_id, :sale_data => ActiveSupport::JSON.encode(@sale_data)}) else render json: JSON.generate({:status => false, :error_message => "No Current Open Shift!"}) end diff --git a/app/controllers/api/shifts_controller.rb b/app/controllers/api/shifts_controller.rb index 754d2375..d1cdd0ad 100644 --- a/app/controllers/api/shifts_controller.rb +++ b/app/controllers/api/shifts_controller.rb @@ -17,7 +17,7 @@ class Api::ShiftsController < Api::ApiController @shift_sale = ShiftSale.new if @shift_sale.create(opening_balance,cashier_terminal_param, current_login_employee) - render json: JSON.generate({:status => true, :message => "Cashier Terminal successfully signin.", :shift => @shift_sale.to_json}) + render json: JSON.generate({:status => true, :message => "Cashier Terminal successfully signin.", :shift => ActiveSupport::JSON.encode(@shift_sale)}) else render json: JSON.generate({:status => false, :error_message => "Some error occurred!"}) end diff --git a/app/controllers/api/void_controller.rb b/app/controllers/api/void_controller.rb new file mode 100644 index 00000000..f8e71c68 --- /dev/null +++ b/app/controllers/api/void_controller.rb @@ -0,0 +1,42 @@ +class Api::VoidController < Api::ApiController + # skip_before_action :authenticate + def overall_void + sale_id = params[:sale_id] + order_source = "emenu" #tax profile source + 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 + + # 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,current_login_employee.name, current_login_employee.name,nil,"SALEVOID" ) + render json: JSON.generate({:status => true, :message => "Void successfully."}) + else + render json: JSON.generate({:status => false, :error_message => "There is no sale for '#{params[:sale_id]}'!"}) + end + end +end + diff --git a/config/routes.rb b/config/routes.rb index 3e6edf5e..dd9660c8 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -100,6 +100,7 @@ scope "(:locale)", locale: /en|mm/ do post "shifts/close" => "shifts#update" post "request_bill" => "bill#request_bill" post "paymal_payment" => "payments#paymal_payment" + get ":sale_id/void" => "void#overall_void" end #--------- Cashier ------------# From b8f96a1f87ded14e58040363bf10b2e48cf3ad23 Mon Sep 17 00:00:00 2001 From: phyusin Date: Tue, 16 Oct 2018 15:40:50 +0630 Subject: [PATCH 6/7] change json format --- .../api/authenticate_controller.rb | 23 +++++++++---- app/controllers/api/bill_controller.rb | 18 ++++++---- app/controllers/api/shifts_controller.rb | 8 +++-- .../authenticate/create_cashier.json.jbuilder | 15 ++++++++ app/views/api/bill/request_bill.json.jbuilder | 26 ++++++++++++++ app/views/api/shifts/create.json.jbuilder | 34 +++++++++++++++++++ 6 files changed, 108 insertions(+), 16 deletions(-) create mode 100644 app/views/api/authenticate/create_cashier.json.jbuilder create mode 100644 app/views/api/bill/request_bill.json.jbuilder create mode 100644 app/views/api/shifts/create.json.jbuilder diff --git a/app/controllers/api/authenticate_controller.rb b/app/controllers/api/authenticate_controller.rb index dc14e478..410d4bd0 100755 --- a/app/controllers/api/authenticate_controller.rb +++ b/app/controllers/api/authenticate_controller.rb @@ -20,26 +20,35 @@ class Api::AuthenticateController < Api::ApiController def create_cashier emp_id = params[:emp_id] password = params[:password] - + @terminals = [] if emp_id && password @employee = Employee.login(emp_id, password) if @employee && @employee.role == "cashier" if @employee.is_active shift = ShiftSale.current_open_shift(@employee.id) if !shift.nil? - render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role}) + @status = true + # render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role}) else - terminals = CashierTerminal.available.is_active - render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role, :error_message => "No current shift open for this employee!", :terminals => ActiveSupport::JSON.encode(terminals)}) + @status = true + @terminals = CashierTerminal.available.is_active + @error_message = "No current shift open for this employee!" + # render json: JSON.generate({:status => true, :session_token => @employee.token_session, :name => @employee.name, :role => @employee.role, :error_message => "No current shift open for this employee!", :terminals => terminals.to_json}) end else - render json: JSON.generate({:status => false, :error_message => "This employee is not active!"}) + @status = false + @error_message = "This employee is not active!" + # render json: JSON.generate({:status => false, :error_message => "This employee is not active!"}) end else - render json: JSON.generate({:status => false, :error_message => "Bad Emp_ID or Password."}) + @status = false + @error_message = "Bad Emp_ID or Password!" + # render json: JSON.generate({:status => false, :error_message => "Bad Emp_ID or Password."}) end else - render json: JSON.generate({:status => false, :error_message => "Input Parameters missing."}) + @status = false + @error_message = "Input Parameters missing!" + # render json: JSON.generate({:status => false, :error_message => "Input Parameters missing."}) end end diff --git a/app/controllers/api/bill_controller.rb b/app/controllers/api/bill_controller.rb index aa152aac..52706482 100755 --- a/app/controllers/api/bill_controller.rb +++ b/app/controllers/api/bill_controller.rb @@ -124,9 +124,6 @@ class Api::BillController < Api::ApiController end def request_bill - puts "order items" - puts params[:order_items] - if params[:order_items] is_extra_time = false extra_time = '' @@ -178,15 +175,22 @@ class Api::BillController < Api::ApiController end end # Promotion.promo_activate(@sale) - render json: JSON.generate({:status => true, :sale_id => @sale_id, :sale_data => ActiveSupport::JSON.encode(@sale_data)}) + @status = true + # render json: JSON.generate({:status => true, :sale_id => @sale_id, :sale_data => @sale_data.to_json }) else - render json: JSON.generate({:status => false, :error_message => "No Current Open Shift!"}) + @status = false + @error_message = "No Current Open Shift!" + # render json: JSON.generate({:status => false, :error_message => "No Current Open Shift!"}) end else - render json: JSON.generate({:status => false, :error_message => "Create order failed, some error occurred!"}) + @status = false + @error_message = "Create order failed, some error occurred!" + # render json: JSON.generate({:status => false, :error_message => "Create order failed, some error occurred!"}) end else - render json: JSON.generate({:status => false, :error_message => "Parameters missing!"}) + @status = false + @error_message = "Parameters missing!" + # render json: JSON.generate({:status => false, :error_message => "Parameters missing!"}) end end diff --git a/app/controllers/api/shifts_controller.rb b/app/controllers/api/shifts_controller.rb index d1cdd0ad..d8de4e50 100644 --- a/app/controllers/api/shifts_controller.rb +++ b/app/controllers/api/shifts_controller.rb @@ -17,9 +17,13 @@ class Api::ShiftsController < Api::ApiController @shift_sale = ShiftSale.new if @shift_sale.create(opening_balance,cashier_terminal_param, current_login_employee) - render json: JSON.generate({:status => true, :message => "Cashier Terminal successfully signin.", :shift => ActiveSupport::JSON.encode(@shift_sale)}) + @status = true + @message = "Cashier Terminal successfully signin." + # render json: JSON.generate({:status => true, :message => "Cashier Terminal successfully signin.", :shift => ActiveSupport::JSON.encode(@shift_sale)}) else - render json: JSON.generate({:status => false, :error_message => "Some error occurred!"}) + @status = false + @error_message = "Some error occurred!" + # render json: JSON.generate({:status => false, :error_message => "Some error occurred!"}) end end end diff --git a/app/views/api/authenticate/create_cashier.json.jbuilder b/app/views/api/authenticate/create_cashier.json.jbuilder new file mode 100644 index 00000000..be85fb81 --- /dev/null +++ b/app/views/api/authenticate/create_cashier.json.jbuilder @@ -0,0 +1,15 @@ +if @status == true + json.status :true + json.session_token @employee.token_session + json.name @employee.token_session + json.role @employee.role + if @error_message + json.error_message @error_message + json.terminals do + json.array! @terminals, :id, :name, :is_active, :is_currently_login + end + end +else + json.status :false + json.error_message @error_message +end \ No newline at end of file diff --git a/app/views/api/bill/request_bill.json.jbuilder b/app/views/api/bill/request_bill.json.jbuilder new file mode 100644 index 00000000..33d55350 --- /dev/null +++ b/app/views/api/bill/request_bill.json.jbuilder @@ -0,0 +1,26 @@ +if @status == true + #show invoice number and stuff + json.status @status + json.sale_id @sale_id + sale = Sale.find(@sale_id) + + json.sale_items sale.sale_items do |sale_item| + json.sale_item_id sale_item.sale_item_id + json.sale_id sale_item.sale_id + json.product_code sale_item.product_code + json.item_instance_code sale_item.item_instance_code + json.product_name sale_item.product_name + json.product_alt_name sale_item.product_alt_name + json.account_id sale_item.account_id + json.status sale_item.status + json.remark sale_item.remark + json.qty sale_item.qty + json.unit_price sale_item.unit_price + json.taxable_price sale_item.taxable_price + json.price sale_item.price + json.is_taxable sale_item.is_taxable + end +else + json.status @status + json.error_message @error_message +end diff --git a/app/views/api/shifts/create.json.jbuilder b/app/views/api/shifts/create.json.jbuilder new file mode 100644 index 00000000..88c5d5ce --- /dev/null +++ b/app/views/api/shifts/create.json.jbuilder @@ -0,0 +1,34 @@ +if @status == true + json.status true + json.message @message + + # json.shift_sale @shift_sale do |shift| + # json.id shift.id + # json.cashier_terminal_id shift.cashier_terminal_id + # json.shift_started_at shift.shift_started_at.strftime("%Y-%m-%d %H:%m:%s") + # json.shift_closed_at shift.shift_closed_at.strftime("%Y-%m-%d %H:%m:%s") + # json.employee_id shift.employee_id + # json.opening_balance shift.opening_balance + # json.closing_balance shift.closing_balance + # json.total_revenue shift.total_revenue + # json.total_discounts shift.total_discounts + # json.total_taxes shift.total_taxes + # json.grand_total shift.grand_total + # json.nett_sales shift.nett_sales + # json.cash_sales shift.cash_sales + # json.credit_sales shift.credit_sales + # json.other_sales shift.other_sales + # json.commercial_taxes shift.commercial_taxes + # json.cash_in shift.cash_in + # json.cash_out shift.cash_out + # json.dining_count shift.dining_count + # json.takeaway_count shift.takeaway_count + # json.member_count shift.member_count + # json.total_rounding shift.total_rounding + # json.total_receipt shift.total_receipt + # json.total_void shift.total_void + # end +else + json.status false + json.error_message @error_message +end \ No newline at end of file From 3494d4824cefb9c2a149cf787214d859e1754ab7 Mon Sep 17 00:00:00 2001 From: phyusin Date: Tue, 16 Oct 2018 15:46:54 +0630 Subject: [PATCH 7/7] add shift data --- app/views/api/shifts/create.json.jbuilder | 50 +++++++++++------------ 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/app/views/api/shifts/create.json.jbuilder b/app/views/api/shifts/create.json.jbuilder index 88c5d5ce..c5b02c92 100644 --- a/app/views/api/shifts/create.json.jbuilder +++ b/app/views/api/shifts/create.json.jbuilder @@ -2,32 +2,30 @@ if @status == true json.status true json.message @message - # json.shift_sale @shift_sale do |shift| - # json.id shift.id - # json.cashier_terminal_id shift.cashier_terminal_id - # json.shift_started_at shift.shift_started_at.strftime("%Y-%m-%d %H:%m:%s") - # json.shift_closed_at shift.shift_closed_at.strftime("%Y-%m-%d %H:%m:%s") - # json.employee_id shift.employee_id - # json.opening_balance shift.opening_balance - # json.closing_balance shift.closing_balance - # json.total_revenue shift.total_revenue - # json.total_discounts shift.total_discounts - # json.total_taxes shift.total_taxes - # json.grand_total shift.grand_total - # json.nett_sales shift.nett_sales - # json.cash_sales shift.cash_sales - # json.credit_sales shift.credit_sales - # json.other_sales shift.other_sales - # json.commercial_taxes shift.commercial_taxes - # json.cash_in shift.cash_in - # json.cash_out shift.cash_out - # json.dining_count shift.dining_count - # json.takeaway_count shift.takeaway_count - # json.member_count shift.member_count - # json.total_rounding shift.total_rounding - # json.total_receipt shift.total_receipt - # json.total_void shift.total_void - # end + json.shift_id @shift_sale.id + json.cashier_terminal_id @shift_sale.cashier_terminal_id + json.shift_started_at @shift_sale.shift_started_at + json.shift_closed_at @shift_sale.shift_closed_at + json.employee_id @shift_sale.employee_id + json.opening_balance @shift_sale.opening_balance + json.closing_balance @shift_sale.closing_balance + json.total_revenue @shift_sale.total_revenue + json.total_discounts @shift_sale.total_discounts + json.total_taxes @shift_sale.total_taxes + json.grand_total @shift_sale.grand_total + json.nett_sales @shift_sale.nett_sales + json.cash_sales @shift_sale.cash_sales + json.credit_sales @shift_sale.credit_sales + json.other_sales @shift_sale.other_sales + json.commercial_taxes @shift_sale.commercial_taxes + json.cash_in @shift_sale.cash_in + json.cash_out @shift_sale.cash_out + json.dining_count @shift_sale.dining_count + json.takeaway_count @shift_sale.takeaway_count + json.member_count @shift_sale.member_count + json.total_rounding @shift_sale.total_rounding + json.total_receipt @shift_sale.total_receipt + json.total_void @shift_sale.total_void else json.status false json.error_message @error_message