| @@ -53,8 +47,8 @@ | <%= crm_customer.company rescue '-' %> | <%= crm_customer.contact_no %> | <%= crm_customer.email %> | - - + +
- + <%= paginate @crm_customers %>
diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index 455cda09..3246ea44 100644 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -4,22 +4,40 @@ class Origami::HomeController < BaseOrigamiController def index @tables = Table.all.active.order('status desc') @rooms = Room.all.active.order('status desc') + @complete = Sale.all + @orders = Order.all.order('date desc') end + # origami table detail def show @tables = Table.all.active.order('status desc') @rooms = Room.all.active.order('status desc') + @complete = Sale.all + @orders = Order.all.order('date desc') + @status_order = "" @dining.bookings.each do |booking| - if booking.sale_id.nil? - booking_orders = booking.booking_orders - booking_orders.each do |booking_order| - @order = booking_order.order - end - @status = 'order' - else - @status = 'sale' - @obj = Sale.find(booking.sale_id) - end + if booking.sale_id.nil? + @order_items = Array.new + booking.booking_orders.each do |booking_order| + order = Order.find(booking_order.order_id) + @obj_order = order + @date = order.created_at + order.order_items.each do |item| + @order_items.push(item) + end + end + @status_order = 'order' + else + sale = Sale.find(booking.sale_id) + if sale.sale_status != "completed" + if @status_order == 'order' + @status_order = 'sale' + end + @date = sale.created_at + @status_sale = 'sale' + @obj_sale = sale + end + end end end diff --git a/app/controllers/origami/orders_controller.rb b/app/controllers/origami/orders_controller.rb new file mode 100644 index 00000000..09e0c541 --- /dev/null +++ b/app/controllers/origami/orders_controller.rb @@ -0,0 +1,10 @@ +class Origami::OrdersController < BaseOrigamiController + + def show + @tables = Table.all.active.order('status desc') + @rooms = Room.all.active.order('status desc') + @complete = Sale.all + @orders = Order.all.order('date desc') + @order = Order.find(params[:order_id]) + end +end diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb index e848366c..0e850b00 100644 --- a/app/controllers/origami/request_bills_controller.rb +++ b/app/controllers/origami/request_bills_controller.rb @@ -4,8 +4,9 @@ class Origami::RequestBillsController < BaseOrigamiController @sale = Sale.new sale_order=SaleOrder.new - booking_id = params[:id] - check_booking = Booking.find_by_booking_id(booking_id) + order_id = params[:id] # order_id + bk_order = BookingOrder.find_by_order_id(order_id) + check_booking = Booking.find_by_booking_id(bk_order.booking_id) if check_booking.sale_id.nil? # Create Sale if it doesn't exist puts "current_login_employee" @@ -32,6 +33,5 @@ class Origami::RequestBillsController < BaseOrigamiController printer = Printer::ReceiptPrinter.new(print_settings) printer.print_receipt_bill(print_settings,@sale_items,@sale_data,customer.name, food_total, beverage_total) - redirect_to origami_path(@sale_data.sale_id) end end diff --git a/app/controllers/origami/rooms_controller.rb b/app/controllers/origami/rooms_controller.rb new file mode 100644 index 00000000..1ac7f41a --- /dev/null +++ b/app/controllers/origami/rooms_controller.rb @@ -0,0 +1,32 @@ +class Origami::RoomsController < BaseOrigamiController + + def show + @tables = Table.all.active.order('status desc') + @rooms = Room.all.active.order('status desc') + @complete = Sale.all + @orders = Order.all.order('date desc') + @room = DiningFacility.find(params[:room_id]) + @room.bookings.each do |booking| + if booking.sale_id.nil? + @order_items = Array.new + booking.booking_orders.each do |booking_order| + order = Order.find(booking_order.order_id) + @obj = order + order.order_items.each do |item| + @order_items.push(item) + end + end + @status = 'order' + else + + sale = Sale.find(booking.sale_id) + if sale.sale_status != "completed" + @status = 'sale' + @obj = sale + end + end + end + end + + +end diff --git a/app/controllers/origami/sales_controller.rb b/app/controllers/origami/sales_controller.rb new file mode 100644 index 00000000..e9eb2edc --- /dev/null +++ b/app/controllers/origami/sales_controller.rb @@ -0,0 +1,10 @@ +class Origami::SalesController < BaseOrigamiController + + def show + @tables = Table.all.active.order('status desc') + @rooms = Room.all.active.order('status desc') + @complete = Sale.all + @orders = Order.all.order('date desc') + @sale = Sale.find(params[:sale_id]) + end +end diff --git a/app/models/booking_order.rb b/app/models/booking_order.rb index ddf5ed18..c9f748f0 100644 --- a/app/models/booking_order.rb +++ b/app/models/booking_order.rb @@ -1,5 +1,5 @@ class BookingOrder < ApplicationRecord - #primary key - need to be unique + #primary key - need to be unique belongs_to :booking belongs_to :order diff --git a/app/models/order.rb b/app/models/order.rb index 96382c07..7ab39a4c 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -11,7 +11,7 @@ class Order < ApplicationRecord #internal references attributes for business logic control attr_accessor :items, :guest, :table_id, :new_booking, :booking_type, :employee_name, :booking_id - + scope :active, -> { where("date BETWEEN '#{DateTime.now.utc.end_of_day}' AND '#{DateTime.now.utc.beginning_of_day}'") } #Main Controller method to create new order - validate all inputs and generate new order # order_item : { # order_item_code : "", diff --git a/app/models/room.rb b/app/models/room.rb index 263120fd..87f232e9 100644 --- a/app/models/room.rb +++ b/app/models/room.rb @@ -1,4 +1,4 @@ class Room < DiningFacility - # has_many :bookings, :foreign_key => 'dining_facility_id' + has_many :bookings, :foreign_key => 'dining_facility_id' end diff --git a/app/models/sale.rb b/app/models/sale.rb index 2ffb53ef..e717717a 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -15,6 +15,7 @@ class Sale < ApplicationRecord has_many :bookings scope :open_invoices, -> { where("sale_status = 'new' and receipt_date BETWEEN '#{DateTime.now.utc.end_of_day}' AND '#{DateTime.now.utc.beginning_of_day}'") } + scope :complete_sale, -> { where("sale_status = 'completed' and receipt_date BETWEEN '#{DateTime.now.utc.end_of_day}' AND '#{DateTime.now.utc.beginning_of_day}'") } def generate_invoice_from_booking(booking_id, requested_by) booking = Booking.find(booking_id) @@ -23,7 +24,7 @@ class Sale < ApplicationRecord if (booking) Rails.logger.debug "Booking -> Booking Order Count -> " + booking.booking_orders.count.to_s #get all order attached to this booking and combine into 1 invoice - + booking.booking_orders.each do |order| if booking.sale_id status, sale_id = generate_invoice_from_order(order.order_id, nil, booking, requested_by) @@ -281,15 +282,15 @@ class Sale < ApplicationRecord end end - def self.daily_sales_list(from,to) + def self.daily_sales_list(from,to) payments_total = Sale.select("CAST((CONVERT_TZ(sales.receipt_date,'+00:00','+06:30')) AS DATE) as sale_date, - SUM(case when (sale_payments.payment_method='mpu') then sale_payments.payment_amount else 0 end) as mpu_amount, - SUM(case when (sale_payments.payment_method='master') then sale_payments.payment_amount else 0 end) as master_amount, - SUM(case when (sale_payments.payment_method='visa') then sale_payments.payment_amount else 0 end) as visa_amount, - SUM(case when (sale_payments.payment_method='jcb') then sale_payments.payment_amount else 0 end) as jcb_amount, - SUM(case when (sale_payments.payment_method='paypar') then sale_payments.payment_amount else 0 end) as paypar_amount, - SUM(case when (sale_payments.payment_method='cash') then sale_payments.payment_amount else 0 end) as cash_amount, - SUM(case when (sale_payments.payment_method='credit') then sale_payments.payment_amount else 0 end) as credit_amount, + SUM(case when (sale_payments.payment_method='mpu') then sale_payments.payment_amount else 0 end) as mpu_amount, + SUM(case when (sale_payments.payment_method='master') then sale_payments.payment_amount else 0 end) as master_amount, + SUM(case when (sale_payments.payment_method='visa') then sale_payments.payment_amount else 0 end) as visa_amount, + SUM(case when (sale_payments.payment_method='jcb') then sale_payments.payment_amount else 0 end) as jcb_amount, + SUM(case when (sale_payments.payment_method='paypar') then sale_payments.payment_amount else 0 end) as paypar_amount, + SUM(case when (sale_payments.payment_method='cash') then sale_payments.payment_amount else 0 end) as cash_amount, + SUM(case when (sale_payments.payment_method='credit') then sale_payments.payment_amount else 0 end) as credit_amount, SUM(case when (sale_payments.payment_method='foc') then sale_payments.payment_amount else 0 end) as foc_amount") .joins("join (select * from sale_payments group by sale_payments.sale_id, sale_payments.payment_method) sale_payments on sale_payments.sale_id = sales.sale_id") .where("sale_status = ? AND sales.receipt_date between ? and ? AND total_amount != 0", 'completed', from, to) @@ -304,27 +305,27 @@ class Sale < ApplicationRecord from_date = sale_date.beginning_of_day.utc - diff to_date = sale_date.end_of_day.utc - diff - total_sale = Sale.select("IFNULL(SUM(case when (sale_status='completed') then grand_total else 0 end),0) as grand_total, - IFNULL(SUM(case when (sale_status='completed') then total_discount else 0 end),0) as total_discount, - IFNULL(SUM(case when (sale_status='void') then grand_total else 0 end),0) as void_amount, + total_sale = Sale.select("IFNULL(SUM(case when (sale_status='completed') then grand_total else 0 end),0) as grand_total, + IFNULL(SUM(case when (sale_status='completed') then total_discount else 0 end),0) as total_discount, + IFNULL(SUM(case when (sale_status='void') then grand_total else 0 end),0) as void_amount, IFNULL(SUM(case when (sale_status='completed') then rounding_adjustment else 0 end),0) as rounding_adj") .where("(sale_status = ? OR sale_status = ?) AND receipt_date between ? and ? AND total_amount != 0", 'completed', 'void', from_date, to_date) - + total_sale.each do |sale| grand_total = sale.grand_total total_discount = sale.total_discount - void_amount = sale.void_amount - total = {:sale_date => pay.sale_date, + void_amount = sale.void_amount + total = {:sale_date => pay.sale_date, :mpu_amount => pay.mpu_amount, :master_amount => pay.master_amount, :visa_amount => pay.visa_amount, :jcb_amount => pay.jcb_amount, :paypar_amount => pay.paypar_amount, - :cash_amount => pay.cash_amount, - :credit_amount => pay.credit_amount, + :cash_amount => pay.cash_amount, + :credit_amount => pay.credit_amount, :foc_amount => pay.foc_amount, - :total_discount => total_discount, - :grand_total => grand_total, + :total_discount => total_discount, + :grand_total => grand_total, :void_amount => void_amount, :rounding_adj => sale.rounding_adj} daily_total.push(total) diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index 856cd054..c1743a5a 100644 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -67,7 +67,7 @@ class SalePayment < ApplicationRecord end def self.get_paypar_account(url,token,membership_id,campaign_type_id,merchant_uid,auth_token) - # Control for Paypar Cloud + # Control for Paypar Cloud begin response = HTTParty.get(url, :body => { app_token: token,membership_id:membership_id,campaign_type_id:campaign_type_id,merchant_uid:merchant_uid,auth_token:auth_token}.to_json, @@ -91,14 +91,14 @@ class SalePayment < ApplicationRecord campaign_type_id = membership_actions_data.additional_parameter["campaign_type_id"] sale_data = Sale.find_by_sale_id(sale_id) if sale_data - # Control for Paypar Cloud + # Control for Paypar Cloud begin response = HTTParty.post(url, :body => { generic_customer_id:membership_id,redeem_amount:received_amount,receipt_no:sale_data.receipt_no,campaign_type_id:campaign_type_id,account_no:"",merchant_uid:merchant_uid,auth_token:auth_token}.to_json, :headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json' - }, + }, :timeout => 10 ) rescue Net::OpenTimeout @@ -238,10 +238,17 @@ class SalePayment < ApplicationRecord end def table_update_status(sale_obj) - booking = Booking.find_by_sale_id(sale_obj.id) + status = true + booking = Booking.find_by_sale_id(sale_obj.id) if booking table = DiningFacility.find(booking.dining_facility_id) - if table + bookings = table.bookings + bookings.each do |tablebooking| + if tablebooking.sale.sale_status != 'completed' + status = false + end + end + if status table.status = "available" table.save end @@ -274,7 +281,7 @@ class SalePayment < ApplicationRecord auth_token = memberaction.auth_token.to_s url = membership.gateway_url.to_s + memberaction.gateway_url.to_s - # Control for Paypar Cloud + # Control for Paypar Cloud begin response = HTTParty.post(url, :body => { generic_customer_id:generic_customer_id ,merchant_uid:merchant_uid,total_amount: total_amount,campaign_type_id: campaign_type_id, receipt_no: receipt_no,auth_token:auth_token}.to_json, diff --git a/app/models/table.rb b/app/models/table.rb index 4012a40c..db953c27 100644 --- a/app/models/table.rb +++ b/app/models/table.rb @@ -1,4 +1,4 @@ class Table < DiningFacility has_many :dining_ins - # has_many :bookings, :foreign_key => 'dining_facility_id' + has_many :bookings, :foreign_key => 'dining_facility_id' end diff --git a/app/models/table_booking.rb b/app/models/table_booking.rb index 53fde486..3f2b42d7 100644 --- a/app/models/table_booking.rb +++ b/app/models/table_booking.rb @@ -1,3 +1,2 @@ class TableBooking < Booking - belongs_to :sale end diff --git a/app/views/origami/customers/index.html.erb b/app/views/origami/customers/index.html.erb index dd2b1b99..fd1134f9 100644 --- a/app/views/origami/customers/index.html.erb +++ b/app/views/origami/customers/index.html.erb @@ -2,12 +2,6 @@
| @@ -53,8 +47,8 @@ | <%= crm_customer.company rescue '-' %> | <%= crm_customer.contact_no %> | <%= crm_customer.email %> | - - + +