diff --git a/Gemfile b/Gemfile index 29843573..ac3052b5 100644 --- a/Gemfile +++ b/Gemfile @@ -15,7 +15,7 @@ gem 'mysql2', '>= 0.3.18', '< 0.5' gem 'pg' # redis server for cable -gem 'redis', '~> 3.0' +# gem 'redis', '~> 3.0' # Use Puma as the app server gem 'puma', '~> 3.0' diff --git a/Gemfile.lock b/Gemfile.lock index 0c3a3a27..e2c1dd73 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -119,7 +119,6 @@ GEM nokogiri (1.7.2) mini_portile2 (~> 2.1.0) pdf-core (0.7.0) - pg (0.20.0) prawn (2.2.2) pdf-core (~> 0.7.0) ttfunk (~> 1.5) @@ -253,13 +252,11 @@ DEPENDENCIES kaminari! listen (~> 3.0.5) mysql2 (>= 0.3.18, < 0.5) - pg prawn prawn-table puma (~> 3.0) rack-cors rails (~> 5.1.0) - redis (~> 3.0) rspec-rails (~> 3.5) sass-rails (~> 5.0) schema_to_scaffold diff --git a/app/assets/javascripts/OQS.js b/app/assets/javascripts/OQS.js index 091b6822..80a09b47 100644 --- a/app/assets/javascripts/OQS.js +++ b/app/assets/javascripts/OQS.js @@ -17,21 +17,67 @@ //= require cable $(document).ready(function(){ - $('.queue_station').on('click',function(){ - var title=$(this).children().children('.card-title').text(); - var titles=title.split(' '); + $('.queue_station').on('click',function(){ + var orderZone=$(this).children().children().children('.order-zone').text(); + var orderItem=$(this).children().children().children('.order-item').text(); + var orderQty=$(this).children().children().children('.order-qty').text(); + var orderBy=$(this).children().children().children().children('.order-by').text(); + var orderAt=$(this).children().children().children().children('.order-at').text(); + var orderCustomer=$(this).children().children('.order-customer').text(); - var orderBy=$(this).children().children().children().children('.order-by').text(); - var orderAt=$(this).children().children().children().children('.order-at').text(); - var orderCustomer=$(this).children().children('.order-customer').text(); + $('#order-title').text("ORDER DETAILS - " + orderZone); + $('#order-by').text(orderBy); + $('#order-at').text(orderAt); + $('#order-customer').text(orderCustomer); + $('#order-from').text(orderZone); - $('#order-title').text($('#order-title').text() + titles[0]); - $('#order-by').text(orderBy); - $('#order-at').text(orderAt); - $('#order-customer').text(orderCustomer); - $('#order-from').text(titles[0]); + $('#order-items').text(orderItem); + $('#order-qty').text(orderQty); - $('#order-items').text(titles[1]); - $('#order-qty').text(titles[2].substr(2).replace(']','')); + $('.queue_station').removeClass('selected-item'); + $(this).addClass('selected-item'); }); + + // complete for queue item + $('.order-complete').on('click',function(){ + var _self= $(this); + var assigned_item_id=$(this).attr('id').substr(15); + var params = { 'id':assigned_item_id }; + var station=$(this).parent().parent(".queue_station").parent().parent().attr('id'); + + $.ajax({ + type: 'POST', + url: '/oqs/update_delivery', + data: params, + dataType: 'json', + success: function(data){ + var queue_station=_self.parent().parent(".queue_station"); + + // Remove a queue card from current station + queue_station.remove(); + + // Remove a queue card from current station + queue_station.children('.card-footer').remove(); + + // Add removed queue card from station to completed + $("#completed").children('.card-columns').append(queue_station); + + // update queue item count in station + $("#"+station+"_count").text(parseInt($("#"+station+"_count").text())-1); + $("#completed_count").text(parseInt($("#completed_count").text())+1); + + alert("updated!"); + } + }); + }); + + $('#print_order_item').on('click',function(){ + var assigned_item_id=$('.selected-item').children('.card-block').children('.assigned-order-item').text(); + var params = { 'id':assigned_item_id }; + $.ajax({ + type: 'GET', + url: '/oqs/print/print/'+assigned_item_id, + success: function(data){ } + }); + }); }); diff --git a/app/assets/javascripts/origami/request_bills.coffee b/app/assets/javascripts/origami/request_bills.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/origami/request_bills.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/print_settings.coffee b/app/assets/javascripts/print_settings.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/print_settings.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/OQS.scss b/app/assets/stylesheets/OQS.scss index 23a49d41..07c98b85 100644 --- a/app/assets/stylesheets/OQS.scss +++ b/app/assets/stylesheets/OQS.scss @@ -14,3 +14,7 @@ .order-void { background-color: #FFCCDD; } + +.selected-item { + background-color: blue; +} diff --git a/app/assets/stylesheets/origami/request_bills.scss b/app/assets/stylesheets/origami/request_bills.scss new file mode 100644 index 00000000..20719090 --- /dev/null +++ b/app/assets/stylesheets/origami/request_bills.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the origami/RequestBills controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/print_settings.scss b/app/assets/stylesheets/print_settings.scss new file mode 100644 index 00000000..7dd1ef04 --- /dev/null +++ b/app/assets/stylesheets/print_settings.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the print_settings controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/scaffolds.scss b/app/assets/stylesheets/scaffolds.scss index e69de29b..60451880 100644 --- a/app/assets/stylesheets/scaffolds.scss +++ b/app/assets/stylesheets/scaffolds.scss @@ -0,0 +1,84 @@ +body { + background-color: #fff; + color: #333; + margin: 33px; + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +p, ol, ul, td { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; +} + +pre { + background-color: #eee; + padding: 10px; + font-size: 11px; +} + +a { + color: #000; + + &:visited { + color: #666; + } + + &:hover { + color: #fff; + background-color: #000; + } +} + +th { + padding-bottom: 5px; +} + +td { + padding: 0 5px 7px; +} + +div { + &.field, &.actions { + margin-bottom: 10px; + } +} + +#notice { + color: green; +} + +.field_with_errors { + padding: 2px; + background-color: red; + display: table; +} + +#error_explanation { + width: 450px; + border: 2px solid red; + padding: 7px 7px 0; + margin-bottom: 20px; + background-color: #f0f0f0; + + h2 { + text-align: left; + font-weight: bold; + padding: 5px 5px 5px 15px; + font-size: 12px; + margin: -7px -7px 0; + background-color: #c00; + color: #fff; + } + + ul li { + font-size: 12px; + list-style: square; + } +} + +label { + display: block; +} diff --git a/app/controllers/api/bookings_controller.rb b/app/controllers/api/bookings_controller.rb index 8f10655f..401cd4a8 100644 --- a/app/controllers/api/bookings_controller.rb +++ b/app/controllers/api/bookings_controller.rb @@ -1,6 +1,5 @@ class Api::BookingsController < Api::ApiController - - + skip_before_action :authenticate #Show customer by ID def index @customer = Customer.find_by(params[:id]) diff --git a/app/controllers/api/orders_controller.rb b/app/controllers/api/orders_controller.rb index 607a7bef..443a754b 100644 --- a/app/controllers/api/orders_controller.rb +++ b/app/controllers/api/orders_controller.rb @@ -7,7 +7,10 @@ class Api::OrdersController < Api::ApiController order = Order.find(params[:order_id]) order.order_items end - + def get_order + order = Order.find(params[:order_id]) + order.order_items + end # Description # This API allow new order creation diff --git a/app/controllers/crm/bookings_controller.rb b/app/controllers/crm/bookings_controller.rb new file mode 100644 index 00000000..eeb19f75 --- /dev/null +++ b/app/controllers/crm/bookings_controller.rb @@ -0,0 +1,18 @@ +class Crm::BookingsController < ApplicationController + + def update_booking + booking = Booking.find(params[:booking_id]) + + + status = booking.update_attributes(booking_status: params[:type]) + + if status == true + render json: JSON.generate({:status => true ,:type => params[:type]}) + + else + render json: JSON.generate({:status => false, :error_message => "Record not found"}) + + end + end + +end diff --git a/app/controllers/crm/home_controller.rb b/app/controllers/crm/home_controller.rb index 2a7153f8..083f2bf7 100644 --- a/app/controllers/crm/home_controller.rb +++ b/app/controllers/crm/home_controller.rb @@ -1,22 +1,22 @@ class Crm::HomeController < BaseCrmController def index - # @booking = Booking.all - - @booking = Booking.select("bookings.id as booking_id, - bookings.checkin_at, - bookings.checkin_by, - bookings.dining_facility_id, - od.customer_id as customer, - od.item_count as count, - odt.id as order_item_id, - odt.item_name as item_name") - .joins("join booking_orders as bko ON bko.booking_id = bookings.id") - .joins("right join orders as od ON od.id = bko.order_id") - .joins("right join order_items as odt ON odt.order_id=od.id") - .order("bookings.id DESC") - + @booking = Booking.all @customer = Customer.all + + #@booking = Booking.select("bookings.id as booking_id, + # bookings.checkin_at, + # bookings.checkin_by, + # bookings.dining_facility_id, + # od.customer_id as customer, + # od.id as order_id, + # od.item_count as count, + # odt.id as order_item_id, + # odt.item_name as item_name") + # .joins("join booking_orders as bko ON bko.booking_id = bookings.id") + # .joins("right join orders as od ON od.id = bko.order_id") + # .joins("right join order_items as odt ON odt.order_id=od.id") + # .order("bookings.id DESC") end def show diff --git a/app/controllers/oqs/home_controller.rb b/app/controllers/oqs/home_controller.rb index 0f73d20d..1292a5e6 100644 --- a/app/controllers/oqs/home_controller.rb +++ b/app/controllers/oqs/home_controller.rb @@ -1,31 +1,50 @@ class Oqs::HomeController < BaseOqsController def index - @queue_stations=OrderQueueStation.all + queue_stations=OrderQueueStation.all + + @queue_items_details = queue_items_query(0) - #sample Data - @queue_items_details = { :queue_id => 1, :order_id => 1, :station_name => 'Queue Station 1', :zone => 'Table4', :item_name => 'beef', :price => 10.00, :qty => 2, :customer => 'Wathon', :item_order_by => 'Yan', :created_at => '2007-05-17'} - # @queue_items_details = OrderItem.select("oqs as queue_id, oqs.station_name, oqs.is_active, oqpz.zone_id, odt.item_code, odt.item_name, odt.price, odt.qty, odt.item_order_by, odt.created_at") - # .joins("join order_queue_process_by_zones as oqpz ON oqpz.order_queue_station_id = order_queue_items.order_queue_station_id") - # .joins("right join order_queue_stations as oqs ON oqs.id = order_queue_items.order_queue_station_id") - # .joins("right join orders as od ON od.id = order_queue_items.order_id") - # .joins("right join order_items as odt ON odt.item_code = order_queue_items.item_code") - # .order("odt.item_name DESC") + @queue_completed_item = queue_items_query(1) + + @queue_stations_items=Array.new - + # Calculate Count for each station tab + queue_stations.each do |que| + i=0 + @queue_items_details.each do |qid| + if qid.station_name == que.station_name + i=i+1 + end + end + @queue_stations_items.push({:station_name => que.station_name, :is_active => que.is_active ,:item_count => i }) + end - # Order.select("orders.id as order_id,sum(order_items.qty*order_items.price) as total_price, - # order_items.id as order_items_id,dining_facilities.name as table_name") - # .joins("left join booking_orders on booking_orders.order_id = orders.id - # left join bookings on bookings.id = booking_orders.id - # left join dining_facilities on dining_facilities.id = bookings.dining_facility_id - # left join order_items on order_items.order_id = orders.id") - # .where("dining_facilities.type=? and orders.order_type=? and dining_facilities.is_active=?",DiningFacility::TABLE_TYPE,"dine_in",true) - # .group("orders.id") + @queue_stations_items end def show end + + # update delivery status when complete click + def update_delivery_status + assigned_item_id = params[:id] + assigned_item=AssignedOrderItem.find(assigned_item_id) + assigned_item.delivery_status=true + assigned_item.save + end + + # Query for OQS with status + def queue_items_query(status) + AssignedOrderItem.select("assigned_order_items.id, oqs.station_name, oqs.is_active, df.name as zone, odt.item_code, odt.item_name, odt.price, odt.qty, odt.item_order_by, cus.name as customer_name, odt.created_at") + .joins("join order_queue_process_by_zones as oqpz ON oqpz.order_queue_station_id = assigned_order_items.order_queue_station_id + left join dining_facilities as df on df.zone_id = oqpz.zone_id + left join order_queue_stations as oqs ON oqs.id = assigned_order_items.order_queue_station_id + left join orders as od ON od.id = assigned_order_items.order_id + left join order_items as odt ON odt.item_code = assigned_order_items.item_code + left join customers as cus ON cus.id = od.customer_id") + .where("assigned_order_items.delivery_status = #{status}") + .group("assigned_order_items.id") + .order("odt.item_name DESC") + end end - - diff --git a/app/controllers/oqs/print_controller.rb b/app/controllers/oqs/print_controller.rb new file mode 100644 index 00000000..368a513d --- /dev/null +++ b/app/controllers/oqs/print_controller.rb @@ -0,0 +1,16 @@ +class Oqs::PrintController < ApplicationController + def print + unique_code="OrderItemPdf" + assigned_item_id=params[:id] + assigned_order_item=AssignedOrderItem.select("order_id, item_code").where('id='+assigned_item_id) + + print_settings=PrintSetting.find_by_unique_code(unique_code) + order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) + order_queue_printer.print_order_item(print_settings,assigned_order_item[0].order_id, assigned_order_item[0].item_code ) + + # update print status when complete click + assigned_item=AssignedOrderItem.find(assigned_item_id) + assigned_item.print_status=true + assigned_item.save + end +end diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb new file mode 100644 index 00000000..c202d4dc --- /dev/null +++ b/app/controllers/origami/request_bills_controller.rb @@ -0,0 +1,13 @@ +class Origami::RequestBillsController < BaseOrigamiController + def show + @sale = Sale.new + check_order = Order.find_by_id(params[:id]) + if check_order + @order_details = OrderItem.get_order_items_details(check_order.id) + @order_details = OrderItem.get_order_items_details(check_order.id) + @status, @sale_id = @sale.generate_invoice_from_order(check_order.id, nil,current_login_employee.name) + @sale_data = Sale.find_by_id(@sale_id) + @sale_items = SaleItem.where("sale_id=?",@sale_id) + end + end +end diff --git a/app/controllers/print_settings_controller.rb b/app/controllers/print_settings_controller.rb new file mode 100644 index 00000000..fa5af7e8 --- /dev/null +++ b/app/controllers/print_settings_controller.rb @@ -0,0 +1,74 @@ +class PrintSettingsController < ApplicationController + before_action :set_print_setting, only: [:show, :edit, :update, :destroy] + + # GET /print_settings + # GET /print_settings.json + def index + @print_settings = PrintSetting.all + end + + # GET /print_settings/1 + # GET /print_settings/1.json + def show + end + + # GET /print_settings/new + def new + @print_setting = PrintSetting.new + end + + # GET /print_settings/1/edit + def edit + end + + # POST /print_settings + # POST /print_settings.json + def create + @print_setting = PrintSetting.new(print_setting_params) + + respond_to do |format| + if @print_setting.save + format.html { redirect_to @print_setting, notice: 'Print setting was successfully created.' } + format.json { render :show, status: :created, location: @print_setting } + else + format.html { render :new } + format.json { render json: @print_setting.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /print_settings/1 + # PATCH/PUT /print_settings/1.json + def update + respond_to do |format| + if @print_setting.update(print_setting_params) + format.html { redirect_to @print_setting, notice: 'Print setting was successfully updated.' } + format.json { render :show, status: :ok, location: @print_setting } + else + format.html { render :edit } + format.json { render json: @print_setting.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /print_settings/1 + # DELETE /print_settings/1.json + def destroy + @print_setting.destroy + respond_to do |format| + format.html { redirect_to print_settings_url, notice: 'Print setting was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_print_setting + @print_setting = PrintSetting.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def print_setting_params + params.require(:print_setting).permit(:name, :unique_code, :template, :db_name, :db_type, :db_username, :db_password, :printer_name, :api_settings, :page_width, :page_height, :print_copies) + end +end diff --git a/app/controllers/settings/accounts_controller.rb b/app/controllers/settings/accounts_controller.rb new file mode 100644 index 00000000..74f27c84 --- /dev/null +++ b/app/controllers/settings/accounts_controller.rb @@ -0,0 +1,73 @@ +class Settings::AccountsController < ApplicationController + before_action :set_account, only: [:show, :edit, :update, :destroy] + + # GET /settings/accounts + # GET /settings/accounts.json + def index + @settings_accounts = Account.all + end + + # GET /settings/accounts/1 + # GET /settings/accounts/1.json + def show + end + + # GET /settings/accounts/new + def new + @settings_account = Account.new + end + + # GET /settings/accounts/1/edit + def edit + end + + # POST /settings/accounts + # POST /settings/accounts.json + def create + @settings_account = Account.new(account_params) + respond_to do |format| + if @settings_account.save! + format.html { redirect_to settings_accounts_url, notice: 'Account was successfully created.' } + format.json { render :index, status: :created, location: @settings_account } + else + format.html { render :new } + format.json { render json: settings_accounts_url.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /settings/accounts/1 + # PATCH/PUT /settings/accounts/1.json + def update + respond_to do |format| + if @settings_account.update(account_params) + format.html { redirect_to settings_accounts_url, notice: 'Account was successfully updated.' } + format.json { render :index, status: :ok, location: @settings_account } + else + format.html { render :edit } + format.json { render json: settings_accounts_url.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /settings/accounts/1 + # DELETE /settings/accounts/1.json + def destroy + @settings_account.destroy + respond_to do |format| + format.html { redirect_to settings_accounts_url, notice: 'Account was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_account + @settings_account = Account.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def account_params + params.require(:account).permit(:title, :account_type) + end +end diff --git a/app/controllers/settings/menu_item_instances_controller.rb b/app/controllers/settings/menu_item_instances_controller.rb new file mode 100644 index 00000000..00f980e9 --- /dev/null +++ b/app/controllers/settings/menu_item_instances_controller.rb @@ -0,0 +1,79 @@ +class Settings::MenuItemInstancesController < ApplicationController + before_action :set_settings_menu_item_instance, only: [:show, :edit, :update, :destroy] + before_action :set_settings_menu_item, only: [:index, :show, :edit, :new, :update] + + # GET /settings/menu_item_instances + # GET /settings/menu_item_instances.json + def index + @settings_menu_item_instances = MenuItemInstance.all + end + + # GET /settings/menu_item_instances/1 + # GET /settings/menu_item_instances/1.json + def show + end + + # GET /settings/menu_item_instances/new + def new + @settings_menu_item_instance = MenuItemInstance.new + end + + # GET /settings/menu_item_instances/1/edit + def edit + end + + # POST /settings/menu_item_instances + # POST /settings/menu_item_instances.json + def create + @settings_menu_item_instance = MenuItemInstance.new(settings_menu_item_instance_params) + + respond_to do |format| + if @settings_menu_item_instance.save + format.html { redirect_to settings_menu_item_instances_path, notice: 'Menu item instance was successfully created.' } + format.json { render :show, status: :created, location: @settings_menu_item_instance } + else + format.html { render :new } + format.json { render json: @settings_menu_item_instance.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /settings/menu_item_instances/1 + # PATCH/PUT /settings/menu_item_instances/1.json + def update + respond_to do |format| + if @settings_menu_item_instance.update(settings_menu_item_instance_params) + format.html { redirect_to settings_menu_item_instance_path(@settings_menu_item_instance), notice: 'Menu item instance was successfully updated.' } + format.json { render :show, status: :ok, location: @settings_menu_item_instance } + else + format.html { render :edit } + format.json { render json: @settings_menu_item_instance.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /settings/menu_item_instances/1 + # DELETE /settings/menu_item_instances/1.json + def destroy + # @settings_menu_item_instance.destroy + respond_to do |format| + format.html { redirect_to settings_menu_item_instances_path, notice: 'Menu item instance was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_settings_menu_item_instance + @set_settings_menu_item_instances = MenuItemInstance.find(params[:id]) + end + + def set_settings_menu_item + @item = MenuItem.find(params[:menu_item_id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def settings_menu_item_instance_params + params.require(:menu_item_instance).permit(:item_instance_code, :item_instance_name, :price, :is_on_promotion, :promotion_price, :is_available) + end +end diff --git a/app/controllers/settings/order_queue_stations_controller.rb b/app/controllers/settings/order_queue_stations_controller.rb index ec85e56a..e0cf0d08 100644 --- a/app/controllers/settings/order_queue_stations_controller.rb +++ b/app/controllers/settings/order_queue_stations_controller.rb @@ -1,5 +1,5 @@ class Settings::OrderQueueStationsController < ApplicationController - before_action :set_settings_order_queue_station, only: [:show, :edit,:new, :update, :destroy] + before_action :set_settings_order_queue_station, only: [:show, :edit, :update, :destroy] # GET /settings/order_queue_stations # GET /settings/order_queue_stations.json @@ -25,10 +25,10 @@ class Settings::OrderQueueStationsController < ApplicationController # POST /settings/order_queue_stations.json def create @settings_order_queue_station = OrderQueueStation.new(settings_order_queue_station_params) - + @settings_order_queue_station.created_by = current_login_employee.name respond_to do |format| if @settings_order_queue_station.save - format.html { redirect_to @settings_order_queue_station, notice: 'Order queue station was successfully created.' } + format.html { redirect_to settings_order_queue_stations_path, notice: 'Order queue station was successfully created.' } format.json { render :show, status: :created, location: @settings_order_queue_station } else format.html { render :new } diff --git a/app/controllers/settings/set_menu_items_controller.rb b/app/controllers/settings/set_menu_items_controller.rb index b488ac6f..cc5e89e8 100644 --- a/app/controllers/settings/set_menu_items_controller.rb +++ b/app/controllers/settings/set_menu_items_controller.rb @@ -10,6 +10,7 @@ class Settings::SetMenuItemsController < ApplicationController # GET /settings/menu_items/1 # GET /settings/menu_items/1.json def show + @sub_menu = MenuItem.where("menu_item_id=?",params[:id]).page(params[:page]).per(10) end # GET /settings/menu_items/new diff --git a/app/controllers/settings/simple_menu_items_controller.rb b/app/controllers/settings/simple_menu_items_controller.rb index 6b3c4bb4..d2083e59 100644 --- a/app/controllers/settings/simple_menu_items_controller.rb +++ b/app/controllers/settings/simple_menu_items_controller.rb @@ -1,6 +1,6 @@ class Settings::SimpleMenuItemsController < ApplicationController - before_action :set_settings_menu_item, only: [:show, :edit, :update, :destroy] - before_action :set_settings_menu_category, only: [:index, :show, :edit, :new, :update] + before_action :set_settings_menu_item, only: [:show, :edit, :update, :destroy ] + before_action :set_settings_menu_category, only: [:index, :show, :edit, :new, :update ,:create] # GET /settings/menu_items # GET /settings/menu_items.json def index @@ -10,6 +10,8 @@ class Settings::SimpleMenuItemsController < ApplicationController # GET /settings/menu_items/1 # GET /settings/menu_items/1.json def show + @sub_menu = MenuItem.where("menu_item_id=?",params[:id]).page(params[:page]).per(10) + @menu_item_instance = MenuItemInstance.where("menu_item_id=?",params[:id]).page(params[:page]).per(10) end # GET /settings/menu_items/new diff --git a/app/helpers/crm/bookings_helper.rb b/app/helpers/crm/bookings_helper.rb new file mode 100644 index 00000000..2d775cd1 --- /dev/null +++ b/app/helpers/crm/bookings_helper.rb @@ -0,0 +1,2 @@ +module Crm::BookingsHelper +end diff --git a/app/helpers/oqs/print_helper.rb b/app/helpers/oqs/print_helper.rb new file mode 100644 index 00000000..8deee2c2 --- /dev/null +++ b/app/helpers/oqs/print_helper.rb @@ -0,0 +1,2 @@ +module Oqs::PrintHelper +end diff --git a/app/helpers/origami/request_bills_helper.rb b/app/helpers/origami/request_bills_helper.rb new file mode 100644 index 00000000..a33f7c3e --- /dev/null +++ b/app/helpers/origami/request_bills_helper.rb @@ -0,0 +1,2 @@ +module Origami::RequestBillsHelper +end diff --git a/app/helpers/print_settings_helper.rb b/app/helpers/print_settings_helper.rb new file mode 100644 index 00000000..3e712d7c --- /dev/null +++ b/app/helpers/print_settings_helper.rb @@ -0,0 +1,2 @@ +module PrintSettingsHelper +end diff --git a/app/helpers/settings/accounts_helper.rb b/app/helpers/settings/accounts_helper.rb new file mode 100644 index 00000000..de8b6ad9 --- /dev/null +++ b/app/helpers/settings/accounts_helper.rb @@ -0,0 +1,2 @@ +module Settings::AccountsHelper +end diff --git a/app/models/account.rb b/app/models/account.rb new file mode 100644 index 00000000..4cf5040c --- /dev/null +++ b/app/models/account.rb @@ -0,0 +1,7 @@ +class Account < ApplicationRecord + validates_presence_of :title, :account_type + + has_many :menu_items + # belongs_to :lookup , :class_name => "Lookup" ,:foreign_key => :tax_type + +end diff --git a/app/models/crm.rb b/app/models/crm.rb new file mode 100644 index 00000000..3407e215 --- /dev/null +++ b/app/models/crm.rb @@ -0,0 +1,5 @@ +module Crm + def self.table_name_prefix + 'crm_' + end +end diff --git a/app/models/lookup.rb b/app/models/lookup.rb index 1784b7a7..e1b141df 100644 --- a/app/models/lookup.rb +++ b/app/models/lookup.rb @@ -1,4 +1,6 @@ class Lookup < ApplicationRecord + + has_many :accounts def available_types {'Employee Roles' => 'employee_roles', diff --git a/app/models/menu_item.rb b/app/models/menu_item.rb index 70528e83..e83c2eed 100644 --- a/app/models/menu_item.rb +++ b/app/models/menu_item.rb @@ -1,9 +1,12 @@ class MenuItem < ApplicationRecord + belongs_to :account belongs_to :menu_category, :optional => true has_many :menu_item_instances belongs_to :parent, :class_name => "MenuItem", foreign_key: "menu_item_id", :optional => true has_many :children, :class_name => "MenuItem", foreign_key: "menu_item_id" + validates_presence_of :item_code, :type, :min_qty, :taxable, :min_selectable_item, :max_selectable_item + default_scope { order('item_code asc') } def self.collection diff --git a/app/models/order.rb b/app/models/order.rb index cf65a047..65232f40 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -238,13 +238,15 @@ class Order < ApplicationRecord end #Origami: Cashier : to view orders def self.get_orders + from = Time.now.beginning_of_day.utc + to = Time.now.end_of_day.utc orders = Order.select("orders.id as order_id,sum(order_items.qty*order_items.price) as total_price, order_items.id as order_items_id,dining_facilities.name as table_or_room_name") .joins("left join booking_orders on booking_orders.order_id = orders.id left join bookings on bookings.id = booking_orders.id left join dining_facilities on dining_facilities.id = bookings.dining_facility_id left join order_items on order_items.order_id = orders.id") - .where("dining_facilities.is_active=?",true) + .where("dining_facilities.is_active=? and orders.date between ? and ?",true,from,to) .group("orders.id") end end diff --git a/app/models/print_setting.rb b/app/models/print_setting.rb new file mode 100644 index 00000000..b715af52 --- /dev/null +++ b/app/models/print_setting.rb @@ -0,0 +1,2 @@ +class PrintSetting < ApplicationRecord +end diff --git a/app/models/printer/order_queue_printer.rb b/app/models/printer/order_queue_printer.rb index 4e520ed9..6a8a4b78 100644 --- a/app/models/printer/order_queue_printer.rb +++ b/app/models/printer/order_queue_printer.rb @@ -1,22 +1,46 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker - def print_order_item(order_queue_id) + def print_order_item(printer_settings,order_id, item_code) #Use CUPS service #Generate PDF #Print - pdf = OrderItemPdf.new - pdf.render_file "tmp/order_item_queue_#{order_id}_#{order_item_id}" + ".pdf" + order_item= print_query('order_item', item_code) #OrderItem.find_by_item_code(item_code) + pdf = OrderItemPdf.new(order_item[0],printer_settings) + pdf.render_file "tmp/receipt.pdf" self.print("tmp/receipt.pdf") end - def print_order_summary(booking_id) + def print_order_summary(printer_settings,booking_id) #Use CUPS service #Generate PDF #Print + order=print_query('booking',booking_id) filename = "tmp/order_summary_#{booking_id}" + ".pdf" - pdf = OrderSummaryPdf.new + pdf = OrderSummaryPdf.new(order,printer_settings) pdf.render_file filename self.print(filename) end + + # Query for OQS with status + def print_query(type, code) + if type == 'order_item' + OrderItem.select("order_items.item_code, order_items.item_name,order_items.item_order_by as order_by, order_items.created_at as order_at, cus.name as customer, df.name as dining") + .joins("left join orders ON orders.id = order_items.order_id + left join booking_orders AS bo ON bo.order_id=order_items.order_id + left join bookings AS b ON b.id = bo.booking_id + left join dining_facilities AS df ON df.id = b.dining_facility_id + left join customers as cus ON cus.id = orders.customer_id") + .where("order_items.item_code=" + code) + .group("order_items.item_code") + else + OrderItem.select("order_items.item_code, order_items.item_name, df.name as dining") + .joins("left join orders ON orders.id = order_items.order_id + left join booking_orders AS bo ON bo.order_id=order_items.order_id + left join bookings AS b ON b.id = bo.booking_id + left join dining_facilities AS df ON df.id = b.dining_facility_id") + .where("booking.id=" + code) + end + + end end diff --git a/app/models/sale.rb b/app/models/sale.rb index 744baafa..ca3bd631 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -190,7 +190,8 @@ class Sale < ApplicationRecord sale_tax.tax_name = tax.name sale_tax.tax_rate = tax.rate #include or execulive - sale_tax.tax_payable_amount = total_taxable * tax.rate + # sale_tax.tax_payable_amount = total_taxable * tax.rate + sale_tax.tax_payable_amount = total_taxable * tax.rate / 100 #new taxable amount total_taxable = total_taxable + sale_tax.tax_payable_amount diff --git a/app/pdf/order_item_pdf.rb b/app/pdf/order_item_pdf.rb index 76df37e2..356327b4 100644 --- a/app/pdf/order_item_pdf.rb +++ b/app/pdf/order_item_pdf.rb @@ -5,14 +5,27 @@ class OrderItemPdf < Prawn::Document # font "public/fonts/#{font_name}".to_s + ".ttf".to_s # font "public/fonts/Zawgyi-One.ttf" - # font "public/fonts/padauk.ttf" - - + # font "public/fonts/padauk.ttf" font_size 9 - text "#{"table_name"}", :size => 15 + text "#{order_item.dining}", :size => 15 stroke_horizontal_rule move_down 5 + cashier_info(order_item.order_by,order_item.order_at, order_item.customer) + + end + + def cashier_info(order_by, order_at, customer) + move_down 5 + y_position = cursor + + bounding_box([0,y_position], :width =>200, :height => 20) do + text "OrderBy:#{order_by} Customer:#{customer} Date:#{order_at.strftime("%Y %m %d")}", :size => 7,:align => :left + end + + stroke_horizontal_rule + + move_down 5 end end diff --git a/app/views/api/bookings/show.json.jbuilder b/app/views/api/bookings/show.json.jbuilder index d579810c..c4edb79f 100644 --- a/app/views/api/bookings/show.json.jbuilder +++ b/app/views/api/bookings/show.json.jbuilder @@ -2,6 +2,8 @@ if (@booking) json.id @booking.id json.status @booking.booking_status json.checkin_at @booking.checkin_at + json.checkin_by @booking.checkin_by + json.table_name @booking.dining_facility.name if @booking.type == "TableBooking" json.table_id @booking.dining_facility_id diff --git a/app/views/crm/home/_booking.html.erb b/app/views/crm/home/_booking.html.erb index cf983116..13702bf6 100644 --- a/app/views/crm/home/_booking.html.erb +++ b/app/views/crm/home/_booking.html.erb @@ -1,26 +1,112 @@ + -
+ + Order at <%= booking.checkin_at.strftime("%H,%m") %>, <%= booking.checkin_by %> + +
+Well Done, Fries, Salad
-- Order at 12:23, Kyaw Lwin | - Printed at 12:23 | - Completed at 12:43 -
+ + <% @i = 0 %> + <% @booking.each do |booking| %> + <% if booking.booking_status == "complete" %> ++ + Order at <%= booking.checkin_at.strftime("%H,%m") %>, <%= booking.checkin_by %> + +
+Well Done, Fries, Salad
-Order at 12:23, Kyaw Lwin
-Well Done, Fries, Salad
-Order at 12:23, Kyaw Lwin
-