diff --git a/app/controllers/origami/orders_controller.rb b/app/controllers/origami/orders_controller.rb index bb1a8752..fced3d02 100755 --- a/app/controllers/origami/orders_controller.rb +++ b/app/controllers/origami/orders_controller.rb @@ -5,6 +5,16 @@ class Origami::OrdersController < BaseOrigamiController @complete = Sale.where("DATE_FORMAT(created_at,'%Y-%m-%d') = ? and sale_status != 'new'",DateTime.now.strftime('%Y-%m-%d')) @orders = Order.where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @order = Order.find(params[:order_id]) + booking = Booking.select('bookings.booking_id, bookings.dining_facility_id') + .joins(" JOIN booking_orders as bo on bo.booking_id = bookings.booking_id") + .where("bo.order_id='#{params[:order_id]}'").first() + + @booking = Array.new + if !booking.nil? + dining_facilities = DiningFacility.find_by_id(booking.dining_facility_id) + @booking.push({'booking_id' => booking.booking_id, 'dining_facility_id' => booking.dining_facility_id, 'type' => dining_facilities.type}) + end + sale_order = SaleOrder.find_by_order_id(@order.order_id) if sale_order unless sale_order.sale_id.nil? @@ -12,19 +22,17 @@ class Origami::OrdersController < BaseOrigamiController @sale_status = sale.sale_status end end - - @orders.each do |order| - order.order_items.each_with_index do |item, index| - if !item.set_menu_items.nil? - instance_item_sets = JSON.parse(item.set_menu_items) - arr_instance_item_sets = Array.new - instance_item_sets.each do |instance_item| - item_instance_name = MenuItemInstance.find_by_item_instance_code(instance_item["item_instance_code"]).item_instance_name - arr_instance_item_sets.push(item_instance_name) - item.price = item.price.to_f + instance_item["price"].to_f - end - order.order_items[index].set_menu_items = arr_instance_item_sets + + @order.order_items.each_with_index do |item, order_item_index| + if !item.set_menu_items.nil? + instance_item_sets = JSON.parse(item.set_menu_items) + arr_instance_item_sets = Array.new + instance_item_sets.each do |instance_item| + item_instance_name = MenuItemInstance.find_by_item_instance_code(instance_item["item_instance_code"]).item_instance_name + arr_instance_item_sets.push(item_instance_name) + item.price = item.price.to_f + instance_item["price"].to_f end + @order.order_items[order_item_index].set_menu_items = arr_instance_item_sets end end diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index adb67963..978d424f 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -8,7 +8,8 @@ class Origami::PaymentsController < BaseOrigamiController sale_data = Sale.find_by_sale_id(sale_id) sale_items = SaleItem.where("sale_id=?",sale_id) member_info = nil - + survey = Survey.find_by_receipt_no(sale_data.receipt_no) + # For Cashier by Zone bookings = Booking.where("sale_id='#{sale_id}'") if bookings.count > 1 @@ -60,7 +61,7 @@ class Origami::PaymentsController < BaseOrigamiController printer = Printer::ReceiptPrinter.new(print_settings) - printer.print_receipt_bill(print_settings,cashier_terminal,sale_items,sale_data,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info, shop_details, "Frt",current_balance,nil) + printer.print_receipt_bill(print_settings,cashier_terminal,sale_items,sale_data,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info, shop_details, "Frt",current_balance,nil,survey) end end @@ -72,6 +73,7 @@ class Origami::PaymentsController < BaseOrigamiController if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) shop_details = Shop::ShopDetail + survey = Survey.find_by_receipt_no(saleObj.receipt_no) # rounding adjustment if shop_details.is_rounding_adj a = saleObj.grand_total % 25 # Modulus @@ -139,7 +141,7 @@ class Origami::PaymentsController < BaseOrigamiController discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items) printer = Printer::ReceiptPrinter.new(print_settings) - printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "Paid",current_balance,card_data) + printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "Paid",current_balance,card_data,survey) end end end @@ -245,7 +247,8 @@ class Origami::PaymentsController < BaseOrigamiController member_info = nil saleObj = Sale.find(sale_id) - + survey = Survey.find_by_receipt_no(saleObj.receipt_no) + # For Cashier by Zone bookings = Booking.where("sale_id='#{sale_id}'") if bookings.count > 1 @@ -292,7 +295,7 @@ class Origami::PaymentsController < BaseOrigamiController discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items) printer = Printer::ReceiptPrinter.new(print_settings) - printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "Re-print",current_balance,card_data) + printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "Re-print",current_balance,card_data,survey) end end @@ -306,7 +309,8 @@ class Origami::PaymentsController < BaseOrigamiController if(Sale.exists?(sale_id)) saleObj = Sale.find(sale_id) - + survey = Survey.find_by_receipt_no(saleObj.receipt_no) + if saleObj.discount_type == "member_discount" saleObj.update_attributes(rounding_adjustment: 0) saleObj.compute_by_sale_items(sale_id, saleObj.sale_items,0) @@ -344,7 +348,7 @@ class Origami::PaymentsController < BaseOrigamiController discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items) printer = Printer::ReceiptPrinter.new(print_settings) - printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "FOC",nil,nil) + printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "FOC",nil,nil,survey) end end end diff --git a/app/controllers/origami/split_bill_controller.rb b/app/controllers/origami/split_bill_controller.rb index f2284e15..dd8dd990 100644 --- a/app/controllers/origami/split_bill_controller.rb +++ b/app/controllers/origami/split_bill_controller.rb @@ -18,10 +18,10 @@ class Origami::SplitBillController < BaseOrigamiController if @booking @booking.booking_orders.each do |booking_order| + arr_order_items = Array.new @order = Order.find(booking_order.order_id) if (@order.status == "new") @orders.push(@order) - @order_items.push({'all_order' => @order.order_items}) @order.order_items.each do |item| if !item.set_menu_items.nil? @@ -59,19 +59,19 @@ class Origami::SplitBillController < BaseOrigamiController 'updated_at' => item.updated_at} i += 1 @order_items.push({@order.order_id => arr_item}) + arr_order_items.push(arr_item) end else + arr_order_items.push(item) @order_items.push({@order.order_id => item}) end end + @order_items.push({'all_order' => arr_order_items}) end end else @booking = nil end - - puts "@order_items" - puts @order_items.to_json end def create @@ -160,19 +160,19 @@ class Origami::SplitBillController < BaseOrigamiController if !updated_order_id.empty? order_ids.each do |odr_id| unless updated_order_id.include?(odr_id) - BookingOrder.find_by_order_id(odr_id).delete + # BookingOrder.find_by_order_id(odr_id).delete BookingOrder.create({:booking_id => booking.booking_id, :order_id => odr_id}) end end order_items.each do |order_item| if updated_order_id.include?(order_item["order_id"]) - update_order_item(order_item) + update_order_item(order_id, order_item) end end else order_ids.each do |odr_id| - BookingOrder.find_by_order_id(odr_id).delete + # BookingOrder.find_by_order_id(odr_id).delete BookingOrder.create({:booking_id => booking.booking_id, :order_id => odr_id}) end end @@ -181,12 +181,15 @@ class Origami::SplitBillController < BaseOrigamiController BookingOrder.create({:booking_id => booking.booking_id, :order_id => order_id}) order_items.each do |order_item| - update_order_item(order_item) + update_order_item(order_id, order_item) end end else if order_ids.count == 1 && order_id_count > 0 && order_item_count == 1 BookingOrder.create({:booking_id => booking.booking_id, :order_id => order_ids[0]}) + order_items.each do |order_item| + update_order_item(order_ids[0], order_item) + end else customer = Customer.find(params[:customer_id]) order_type = "dine_in" @@ -214,7 +217,7 @@ class Origami::SplitBillController < BaseOrigamiController BookingOrder.create({:booking_id => booking.booking_id, :order_id => order.order_id}) order_items.each do |order_item| - update_order_item(order_item) + update_order_item(order.id, order_item) end end end @@ -239,7 +242,7 @@ class Origami::SplitBillController < BaseOrigamiController end end - def update_order_item(order_item) + def update_order_item(order_id, order_item) orderItem = OrderItem.find(order_item["id"]) if orderItem.qty.to_f != order_item['qty'].to_f OrderItem.processs_item(orderItem.item_code, @@ -251,13 +254,13 @@ class Origami::SplitBillController < BaseOrigamiController orderItem.price, orderItem.options, orderItem.set_menu_items, - orderItem.order_id, + order_id, orderItem.item_order_by, orderItem.taxable) orderItem.qty = orderItem.qty.to_f - order_item['qty'].to_f else - orderItem.order_id = order.order_id + orderItem.order_id = order_id end orderItem.save! end diff --git a/app/controllers/origami/surveys_controller.rb b/app/controllers/origami/surveys_controller.rb index 90ff4c08..f7d637d6 100644 --- a/app/controllers/origami/surveys_controller.rb +++ b/app/controllers/origami/surveys_controller.rb @@ -30,6 +30,33 @@ class Origami::SurveysController < BaseOrigamiController end # end end + + def create_survey + if shift_by_terminal = ShiftSale.current_open_shift(get_cashier[0].id) + dining_facility = DiningFacility.find(params[:dining_id]) + cashier_zone = CashierTerminalByZone.find_by_zone_id(dining_facility.zone_id) + shift_by_terminal = ShiftSale.find_by_cashier_terminal_id_and_shift_closed_at(cashier_zone.cashier_terminal_id,nil) + + survey = Survey.find_by_receipt_no(params[:receipt_no]) + + if survey.nil? + survey = Survey.new + survey.dining_name = dining_facility.name + survey.receipt_no = params[:receipt_no] + survey.shift_id = shift_by_terminal.id + survey.created_by = current_user.name + survey.total_customer = params[:total_customer] + survey.total_amount = params[:total_amount] + survey.save! + else + survey.total_customer = params[:total_customer] + survey.save! + end + render :json => {status: true} + else + render :json => { status: false, error_message: 'No Current Open Shift!'} + end + end private diff --git a/app/controllers/origami/table_invoices_controller.rb b/app/controllers/origami/table_invoices_controller.rb index a9d5d340..f2dd132a 100755 --- a/app/controllers/origami/table_invoices_controller.rb +++ b/app/controllers/origami/table_invoices_controller.rb @@ -59,6 +59,12 @@ class Origami::TableInvoicesController < BaseOrigamiController @date = @sale.created_at @status_sale = 'sale' @customer = @sale.customer + #for split bill + lookup_spit_bill = Lookup.collection_of('split_bill') + @split_bill = 0 + if !lookup_spit_bill[0].nil? + @split_bill = lookup_spit_bill[0][1] + end end #Shop Name in Navbor diff --git a/app/controllers/origami/void_controller.rb b/app/controllers/origami/void_controller.rb index f9fbe55a..8fb7c0ae 100755 --- a/app/controllers/origami/void_controller.rb +++ b/app/controllers/origami/void_controller.rb @@ -6,6 +6,8 @@ class Origami::VoidController < BaseOrigamiController if Sale.exists?(sale_id) sale = Sale.find_by_sale_id(sale_id) + survey = Survey.find_by_receipt_no(sale.receipt_no) + if sale.discount_type == "member_discount" sale.update_attributes(total_discount: 0) sale.compute_by_sale_items(sale_id, sale.sale_items,0) @@ -107,7 +109,7 @@ class Origami::VoidController < BaseOrigamiController discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(sale.sale_items) printer = Printer::ReceiptPrinter.new(print_settings) - 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) + 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,survey) end #end print diff --git a/app/models/printer/receipt_printer.rb b/app/models/printer/receipt_printer.rb index 0cf6526f..c60fcc35 100755 --- a/app/models/printer/receipt_printer.rb +++ b/app/models/printer/receipt_printer.rb @@ -173,19 +173,19 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker end #Bill Receipt Print - def print_receipt_bill(printer_settings,cashier_terminal,sale_items,sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info = nil,rebate_amount=nil,shop_details, printed_status,balance,card_data) + def print_receipt_bill(printer_settings,cashier_terminal,sale_items,sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info = nil,rebate_amount=nil,shop_details, printed_status,balance,card_data,survey) #Use CUPS service #Generate PDF #Print - pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data) + pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,survey) receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf if !receipt_bill_a5_pdf.empty? receipt_bill_a5_pdf.each do |receipt_bilA5| if receipt_bilA5[0] == 'ReceiptBillA5Pdf' if receipt_bilA5[1] == '1' - pdf = ReceiptBillA5Pdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data) + pdf = ReceiptBillA5Pdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,survey) else - pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data) + pdf = ReceiptBillPdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,survey) end end end diff --git a/app/pdf/receipt_bill_a5_pdf.rb b/app/pdf/receipt_bill_a5_pdf.rb index 2dde9c93..898b8cf3 100644 --- a/app/pdf/receipt_bill_a5_pdf.rb +++ b/app/pdf/receipt_bill_a5_pdf.rb @@ -1,7 +1,7 @@ class ReceiptBillA5Pdf < Prawn::Document include ActionView::Helpers::NumberHelper 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, :description_width, :price_num_width - def initialize(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info = nil,rebate_amount = nil,shop_details, printed_status,current_balance) + def initialize(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info = nil,rebate_amount = nil,shop_details, printed_status,current_balance,card_data,survey) self.page_width = printer_settings.page_width self.page_height = printer_settings.page_height self.margin = 15 @@ -65,6 +65,12 @@ class ReceiptBillA5Pdf < Prawn::Document customer(customer_name) + #start card sale trans data + if card_data != nil + card_sale_data(card_data) + end + #end card sale trans data + if discount_price_by_accounts.length > 0 && shop_details.show_account_info discount_account(discount_price_by_accounts,printer_settings.precision,delimiter) end @@ -73,6 +79,12 @@ class ReceiptBillA5Pdf < Prawn::Document items_account(item_price_by_accounts,printer_settings.precision,delimiter) end + #start for individual payment + if !survey.nil? + individual_payment(sale_data, survey, printer_settings.precision, delimiter) + end + #end for individual payment + sign(sale_data) footer(printed_status) @@ -459,6 +471,22 @@ class ReceiptBillA5Pdf < Prawn::Document end end + #individual payment per person + def individual_payment(sale_data, survey, precision, delimiter) + per_person = sale_data.grand_total.to_f / survey.total_customer.to_i + move_down 5 + stroke_horizontal_rule + move_down 5 + y_position = cursor + bounding_box([0,y_position], :width =>self.label_width) do + text "Individual amount", :size => self.item_font_size,:align => :left + end + + bounding_box([self.label_width,y_position], :width =>self.item_description_width) do + text "#{number_with_precision(per_person, :precision => precision.to_i, :delimiter => delimiter)} per person", :size => self.item_font_size,:align => :right + end + end + def sign(sale_data) SalePayment.where('sale_id = ?', sale_data.sale_id).each do |payment| if payment.payment_method == "creditnote" @@ -513,6 +541,29 @@ class ReceiptBillA5Pdf < Prawn::Document move_down 10 end + #start card sale trans data + def card_sale_data(card_data) + if card_data != nil && !card_data.empty? + move_down 5 + stroke_horizontal_rule + move_down 5 + + y_position = cursor + card_data.each do |data| + if data['app'] == 'CUP' + data['app'] = 'UNIONPAY' + elsif data['app'] == 'MASTERCARD' + data['app'] = 'MASTER' + end + text "DATE/TIME: #{data['res_date']} #{data['res_time']} ", :size => @item_font_size, :align => :left + text "BATCH NUM: #{data['batch_no']} TRACE#: #{data['trace']}",:size => @item_font_size, :align => :left + text "RREF NUM: #{data['ref_no']} APPR CODE: #{data['app_code']} ",:size => @item_font_size, :align => :left + text "TID: #{data['tid']} ",:size => @item_font_size, :align => :left + text "#{data['app']} #{data['pan']} ",:size => @item_font_size, :align => :left + end + end + end + #check ReceiptBillAltName included def show_alt_name bill_alt_name = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb index d2ad0260..e8ca4bb2 100755 --- a/app/pdf/receipt_bill_pdf.rb +++ b/app/pdf/receipt_bill_pdf.rb @@ -1,7 +1,7 @@ class ReceiptBillPdf < Prawn::Document include ActionView::Helpers::NumberHelper 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, :description_width, :price_num_width - def initialize(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info = nil,rebate_amount = nil,shop_details, printed_status,current_balance,card_data) + def initialize(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info = nil,rebate_amount = nil,shop_details, printed_status,current_balance,card_data,survey) self.page_width = printer_settings.page_width self.page_height = printer_settings.page_height self.margin = 0 @@ -79,6 +79,12 @@ class ReceiptBillPdf < Prawn::Document items_account(item_price_by_accounts,printer_settings.precision,delimiter) end + #start for individual payment + if !survey.nil? + individual_payment(sale_data, survey, printer_settings.precision, delimiter) + end + #end for individual payment + sign(sale_data) footer(printed_status) @@ -465,6 +471,22 @@ class ReceiptBillPdf < Prawn::Document end end + #individual payment per person + def individual_payment(sale_data, survey, precision, delimiter) + per_person = sale_data.grand_total.to_f / survey.total_customer.to_i + move_down 5 + stroke_horizontal_rule + move_down 5 + y_position = cursor + bounding_box([0,y_position], :width =>self.label_width) do + text "Individual amount", :size => self.item_font_size,:align => :left + end + + bounding_box([self.label_width,y_position], :width =>self.item_description_width) do + text "#{number_with_precision(per_person, :precision => precision.to_i, :delimiter => delimiter)} per person", :size => self.item_font_size,:align => :right + end + end + def sign(sale_data) SalePayment.where('sale_id = ?', sale_data.sale_id).each do |payment| if payment.payment_method == "creditnote" diff --git a/app/views/origami/home/show.html.erb b/app/views/origami/home/show.html.erb index 19f308a1..28094ee8 100755 --- a/app/views/origami/home/show.html.erb +++ b/app/views/origami/home/show.html.erb @@ -386,9 +386,14 @@ end %> - - <% if !@spit_bill.nil? && @spit_bill == '1' %> - + + <% if !@split_bill.nil? %> + <% if @split_bill == '1' %> + + + <% else %> + + <% end %> <% end %> <% end %> <% if @sale_array.size > 1 %> @@ -407,6 +412,11 @@ + <% if !@split_bill.nil? %> + <% if @split_bill == '1' %> + + <% end %> + <% end %> diff --git a/app/views/origami/orders/show.html.erb b/app/views/origami/orders/show.html.erb index a1a914fd..4e9d09b1 100755 --- a/app/views/origami/orders/show.html.erb +++ b/app/views/origami/orders/show.html.erb @@ -240,7 +240,8 @@
| # | +Receipt No. | +Total | +Action | + - <% @sale_data.each do |sale_data| %> - <% if sale_data.sale_status != 'completed' %> -
|---|---|---|---|
| Receipt No. - <%= sale_data.receipt_no %> | + <% @sale_data.each_with_index do |sale_data, sale_index| %> + <% if sale_data.sale_status != 'completed' && sale_data.sale_status != 'void' %> + <% checked = "" %> + <% if sale_index == 0 %> + <% checked = "checked" %> + <% end %> +|||
| > | +<%= sale_data.receipt_no %> | +<%= sale_data.grand_total %> | ++ + |