class Api::Payment::MobilepaymentController < Api::ApiController # skip_before_action :authenticate def cash cash = params[:cash] sale_id = params[:sale_id] member_info = nil type = params[:type] tax_type = params[:tax_type] path = request.fullpath latest_order_no = nil cashier_id = params[:cashier_id] current_user = Employee.find(cashier_id) if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) sale_items = SaleItem.get_all_sale_items(sale_id) shop_detail = Shop.first # rounding adjustment if !path.include? ("credit_payment") if shop_detail.is_rounding_adj a = saleObj.grand_total % 25 # Modulus b = saleObj.grand_total / 25 # Division #not calculate rounding if modulus is 0 and division is even #calculate rounding if modulus is zero or not zero and division are not even if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0) new_total = Sale.get_rounding_adjustment(saleObj.grand_total) rounding_adj = new_total-saleObj.grand_total saleObj.update_attributes(grand_total: new_total,old_grand_total: saleObj.grand_total,rounding_adjustment:rounding_adj) end end end # end rounding adjustment sale_payment = SalePayment.new sale_payment =sale_payment.process_payment(saleObj, current_user, cash, "cash") if sale_payment[0] @cash ={"change_amount"=>sale_payment[3],"balance_amount"=>sale_payment[4] ,"receipt_url"=>''} end @out = true,@cash # if !path.include? ("credit_payment") # rebate_amount = nil # # For Cashier by Zone # # bookings = Booking.where("sale_id='#{sale_id}'") # bookings = Booking.find_by_sale_id(sale_id) # shift = ShiftSale.current_open_shift(current_user.id) # if !shift.nil? # cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id) # else # if bookings.dining_facility_id.to_i > 0 # table = DiningFacility.find(bookings.dining_facility_id) # cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id) # cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id) # type = 'payment' # from = getCloudDomain #get sub domain in cloud mode # ActionCable.server.broadcast "order_channel",table: table,type:type,from:from # else # shift = ShiftSale.find(saleObj.shift_sale_id) # cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id) # end # end # # For Print # # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server # receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf # unique_code = "ReceiptBillPdf" # print_settings = PrintSetting.all # if !print_settings.nil? # print_settings.each do |setting| # if setting.unique_code == 'ReceiptBillPdf' # unique_code = "ReceiptBillPdf" # elsif setting.unique_code == 'ReceiptBillStarPdf' # unique_code = "ReceiptBillStarPdf" # end # end # end # if !receipt_bill_a5_pdf.empty? # receipt_bill_a5_pdf.each do |receipt_bilA5| # if receipt_bilA5[0] == 'ReceiptBillA5Pdf' # if receipt_bilA5[1] == '1' # unique_code = "ReceiptBillA5Pdf" # end # end # end # end # customer= Customer.find(saleObj.customer_id) # # get member information # rebate = MembershipSetting.find_by_rebate(1) # credit_data = SalePayment.find_by_sale_id_and_payment_method(sale_id,'creditnote') # if customer.membership_id != nil && rebate && credit_data.nil? # member_info = Customer.get_member_account(customer) # if member_info["status"] == true # rebate_amount = Customer.get_membership_transactions(customer,saleObj.receipt_no) # current_balance = SaleAudit.paymal_search(sale_id) # end # end # #orders print out # if params[:type] == "quick_service" # booking = Booking.find_by_sale_id(sale_id) # if booking.dining_facility_id.to_i>0 # table_id = booking.dining_facility_id # else # table_id = 0 # end # latest_order = booking.booking_orders.order("order_id DESC").limit(1).first() # if !latest_order.nil? # latest_order_no = latest_order.order_id # end # booking.booking_orders.each do |order| # # Order.pay_process_order_queue(order.order_id, table_id) # oqs = OrderQueueStation.new # oqs.pay_process_order_queue(order.order_id, table_id) # assign_order = AssignedOrderItem.assigned_order_item_by_job(order.order_id) # from = getCloudDomain #get sub domain in cloud mode # ActionCable.server.broadcast "order_queue_station_channel",order: assign_order,from:from # end # end # #for card sale data # card_data = Array.new # card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id) # if !card_sale_trans_ref_no.nil? # card_sale_trans_ref_no.each do |cash_sale_trans| # card_res_date = cash_sale_trans.res_date.strftime("%Y-%m-%d").to_s # card_res_time = cash_sale_trans.res_time.strftime("%H:%M").to_s # card_no = cash_sale_trans.pan.last(4) # card_no = card_no.rjust(19,"**** **** **** ") # card_data.push({'res_date' => card_res_date, 'res_time' => card_res_time, 'batch_no' => cash_sale_trans.batch_no, 'trace' => cash_sale_trans.trace, 'pan' => card_no, 'app' => cash_sale_trans.app, 'tid' => cash_sale_trans.terminal_id, 'app_code' => cash_sale_trans.app_code, 'ref_no' => cash_sale_trans.ref_no, 'mid' => cash_sale_trans.merchant_id}) # end # end # #card_balance amount for Paymal payment # card_balance_amount = SaleAudit.getCardBalanceAmount(sale_id) # # 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(saleObj.sale_items) # discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items) # other_amount = SaleItem.calculate_other_charges(sale_items) # printer = Printer::ReceiptPrinter.new(print_settings) # filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings,cashier_terminal,sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_detail, "Paid",current_balance,card_data,other_amount,latest_order_no,card_balance_amount,nil) # render json: JSON.generate({:status => saleObj.rebate_status, :message => "Can't Rebate coz of Sever Error ", :filename => filename, :receipt_no => sale_receipt_no, :printer_name => printer_name}) # #end # end else @out =false,"Something wrong!" end end end