From c589f11758779cd6f3ce54829d5f510840179a0c Mon Sep 17 00:00:00 2001 From: Nweni Date: Sat, 1 Jul 2017 09:46:14 +0630 Subject: [PATCH 1/7] shift sale --- app/controllers/origami/shifts_controller.rb | 6 +++--- app/models/sale.rb | 11 ++++++----- app/models/sale_payment.rb | 4 +++- app/models/shift_sale.rb | 4 ++-- app/views/origami/shifts/new.html.erb | 19 ++++++++++++++----- db/migrate/20170403160742_create_sales.rb | 2 +- 6 files changed, 29 insertions(+), 17 deletions(-) diff --git a/app/controllers/origami/shifts_controller.rb b/app/controllers/origami/shifts_controller.rb index 3329aa0b..35af84b6 100644 --- a/app/controllers/origami/shifts_controller.rb +++ b/app/controllers/origami/shifts_controller.rb @@ -4,7 +4,6 @@ class Origami::ShiftsController < BaseOrigamiController end def show - puts current_user.id @shift = ShiftSale.current_open_shift(current_user.id) end @@ -15,8 +14,9 @@ class Origami::ShiftsController < BaseOrigamiController def create opening_balance = params[:opening_balance] + cashier_terminal = params[:cashier_terminal] @shift = ShiftSale.new - @shift.create(opening_balance,current_user) + @shift.create(opening_balance,cashier_terminal, current_user) end def update_shift @@ -30,7 +30,7 @@ class Origami::ShiftsController < BaseOrigamiController end end - def edit end + end diff --git a/app/models/sale.rb b/app/models/sale.rb index 693f6874..1df94034 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -345,8 +345,8 @@ class Sale < ApplicationRecord else ## up to 100 value = 100 - get_last_no.to_f - num += value - puts 'up to 100' + num += value + puts 'up to 100' end end end @@ -479,11 +479,12 @@ end def get_commerical_tax tax = 0.0 - self.sale_taxes.each do |tax| - if tax.tax_name == "Commerical Tax" - tax += tax.tax_payable_amount + self.sale_taxes.each do |taxobj| + if taxobj.tax_name == "Commerical Tax" + tax += taxobj.tax_payable_amount end end + return tax end diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index c78b6cd8..741abfc2 100644 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -266,6 +266,8 @@ class SalePayment < ApplicationRecord shift = ShiftSale.current_open_shift(self.sale.cashier_id) if !shift.nil? shift.update(self.sale) + self.sale.shift_sale_id = shift.id + self.sale.save end end @@ -324,7 +326,7 @@ class SalePayment < ApplicationRecord }, :timeout => 10) rescue Net::OpenTimeout response = { status: false } - + rescue OpenURI::HTTPError response = { status: false} diff --git a/app/models/shift_sale.rb b/app/models/shift_sale.rb index a897de2b..ae4c93a8 100644 --- a/app/models/shift_sale.rb +++ b/app/models/shift_sale.rb @@ -27,8 +27,8 @@ class ShiftSale < ApplicationRecord #end end - def create(opening_balance,current_user) - self.cashier_terminal_id = CashierTerminal.first.id + def create(opening_balance,cashier_terminal, current_user) + self.cashier_terminal_id = cashier_terminal self.shift_started_at = DateTime.now self.employee_id = current_user.id self.opening_balance = opening_balance diff --git a/app/views/origami/shifts/new.html.erb b/app/views/origami/shifts/new.html.erb index 2903a8ae..f5f032bc 100644 --- a/app/views/origami/shifts/new.html.erb +++ b/app/views/origami/shifts/new.html.erb @@ -1,12 +1,19 @@

Open Cashier


-
-
-
-
+
+ + + + <% @float.each do |float| %> @@ -69,10 +76,12 @@ $(document).on('focusout', '.float-value', function(event){ }) $('#open_cashier').on('click',function(){ + var cashier_terminal = $('#cashier_terminal').val(); + alert(cashier_terminal) var amount = $('#total').text(); $.ajax({type: "POST", url: "<%= origami_shifts_path %>", - data: "opening_balance=" + amount, + data: "opening_balance=" + amount + "&cashier_terminal="+ cashier_terminal, success:function(result){ if(result){ window.location.href = '/origami'; diff --git a/db/migrate/20170403160742_create_sales.rb b/db/migrate/20170403160742_create_sales.rb index ae806472..9deeb9b8 100644 --- a/db/migrate/20170403160742_create_sales.rb +++ b/db/migrate/20170403160742_create_sales.rb @@ -20,7 +20,7 @@ class CreateSales < ActiveRecord::Migration[5.1] t.decimal :rounding_adjustment, :precision => 10, :scale => 2, :null => false, :default => 0.00 t.decimal :amount_received, :precision => 10, :scale => 2, :null => false, :default => 0.00 t.decimal :amount_changed, :precision => 10, :scale => 2, :null => false, :default => 0.00 - t.integer :shift_sale_id, :null => false + t.integer :shift_sale_id t.timestamps end end From abefd1f8f26d110c89f8d95ff2ec3147fead5c0d Mon Sep 17 00:00:00 2001 From: Nweni Date: Sat, 1 Jul 2017 14:55:37 +0630 Subject: [PATCH 2/7] Update --- app/models/order_item.rb | 8 ++-- app/models/shift_sale.rb | 2 +- app/views/origami/shifts/new.html.erb | 66 ++++++++++++++++++++------- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/app/models/order_item.rb b/app/models/order_item.rb index f4f3efba..109665d0 100644 --- a/app/models/order_item.rb +++ b/app/models/order_item.rb @@ -43,10 +43,10 @@ class OrderItem < ApplicationRecord def self.get_order_items_details(booking_id) # booking_orders = BookingOrder.where("booking_id=?",booking.booking_id) # if booking_orders - # booking_orders.each do |book_order| + # booking_orders.each do |book_order| # order_details = OrderItem.select("order_items.item_name,order_items.qty,order_items.price,(order_items.qty*order_items.price) as total_price") # .joins("left join orders on orders.order_id = order_items.order_id") - # .where("order_items.order_id=?",book_order.order) + # .where("order_items.order_id=?",book_order.order) # return order_details # end # else @@ -57,9 +57,9 @@ class OrderItem < ApplicationRecord .joins("left join orders on orders.order_id = order_items.order_id") .joins("left join booking_orders on booking_orders.order_id = order_items.order_id") .joins("left join bookings on bookings.booking_id = booking_orders.booking_id") - .where("bookings.booking_id=?",booking_id) + .where("bookings.booking_id=?",booking_id) - return order_details + return order_details end private diff --git a/app/models/shift_sale.rb b/app/models/shift_sale.rb index aa471972..f59c2797 100644 --- a/app/models/shift_sale.rb +++ b/app/models/shift_sale.rb @@ -21,7 +21,7 @@ class ShiftSale < ApplicationRecord #find open shift where is open today and is not closed and login by current cashier today_date = DateTime.now.strftime("%Y-%m-%d") - shift = ShiftSale.where("DATE(shift_started_at)= #{ today_date } and shift_started_at is not null and shift_closed_at is null and employee_id = #{current_user}").take + shift = ShiftSale.where("DATE(shift_started_at)=? and shift_started_at is not null and shift_closed_at is null and employee_id = #{current_user}",today_date).take return shift #end diff --git a/app/views/origami/shifts/new.html.erb b/app/views/origami/shifts/new.html.erb index f5f032bc..83f4df55 100644 --- a/app/views/origami/shifts/new.html.erb +++ b/app/views/origami/shifts/new.html.erb @@ -17,7 +17,7 @@ <% @float.each do |float| %> - + <% end %> @@ -25,12 +25,7 @@
Cashier Terminal + +
<%= float.name %>
<%= float.name %>
-
-
-
- -
-
+
@@ -56,9 +51,9 @@
00
-
Del
-
Clr
-
Ent
+
Clr
+
Calculate
+
Open Cashier
@@ -67,17 +62,54 @@
diff --git a/app/views/origami/cash_outs/new.html.erb b/app/views/origami/cash_outs/new.html.erb index 17f9bdf8..9d628f24 100644 --- a/app/views/origami/cash_outs/new.html.erb +++ b/app/views/origami/cash_outs/new.html.erb @@ -1,6 +1,8 @@ -

Payment Debit

+ +
-
+
+

Payment Debit

Payment Reference @@ -20,13 +22,12 @@
+
+ + +
+
-
-

-
-
-
-
diff --git a/app/views/origami/payments/show.html.erb b/app/views/origami/payments/show.html.erb index 4004e9cf..860633a4 100644 --- a/app/views/origami/payments/show.html.erb +++ b/app/views/origami/payments/show.html.erb @@ -188,10 +188,10 @@
0.0
<% end %> -
+
-
Balance
-
<%= @sale_data.grand_total %>
+
Balance
+
<%= @sale_data.grand_total %>

From 99986b1fb9afdd0c7cda7cb938552e7a24aead5f Mon Sep 17 00:00:00 2001 From: Nweni Date: Sat, 1 Jul 2017 15:30:06 +0630 Subject: [PATCH 4/7] open cashier clear --- app/views/origami/cash_ins/new.html.erb | 3 --- app/views/origami/shifts/new.html.erb | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/views/origami/cash_ins/new.html.erb b/app/views/origami/cash_ins/new.html.erb index 41330fc5..efc8a22b 100644 --- a/app/views/origami/cash_ins/new.html.erb +++ b/app/views/origami/cash_ins/new.html.erb @@ -24,7 +24,6 @@ - Reference Number @@ -36,8 +35,6 @@ - -
diff --git a/app/views/origami/shifts/new.html.erb b/app/views/origami/shifts/new.html.erb index 83f4df55..8d3ca457 100644 --- a/app/views/origami/shifts/new.html.erb +++ b/app/views/origami/shifts/new.html.erb @@ -82,7 +82,7 @@ $(document).on('focusout', '.float-value', function(event){ } break; case 'clr': - $('#cash').text("0"); + $('#'+float_value).val("0"); break; case 'ent': var sum = 0 From 5f3708e11d5249737826b0aa9d4c21546c5f97d8 Mon Sep 17 00:00:00 2001 From: Nweni Date: Sat, 1 Jul 2017 17:15:12 +0630 Subject: [PATCH 5/7] menu updated | edit qty updated --- app/controllers/home_controller.rb | 8 +++++++- .../origami/sale_edit_controller.rb | 20 +++++++++++++++++++ app/views/origami/sale_edit/edit.html.erb | 17 +++++++++------- config/routes.rb | 3 ++- lib/tasks/menu_import.rake | 8 ++++---- 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 3136417f..f2a8676c 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -77,7 +77,13 @@ class HomeController < ApplicationController def route_by_role(employee) if employee.role == "administrator" - redirect_to dashboard_path + # redirect_to dashboard_path + shift = ShiftSale.current_open_shift(employee.id) + if !shift.nil? + redirect_to origami_root_path + else + redirect_to new_origami_shift_path + end elsif employee.role == "cashier" #check if cashier has existing open cashier shift = ShiftSale.current_open_shift(employee.id) diff --git a/app/controllers/origami/sale_edit_controller.rb b/app/controllers/origami/sale_edit_controller.rb index d4fba302..f0d57679 100644 --- a/app/controllers/origami/sale_edit_controller.rb +++ b/app/controllers/origami/sale_edit_controller.rb @@ -23,6 +23,26 @@ class Origami::SaleEditController < BaseOrigamiController @newsaleitem.save end + def item_edit + saleitemId = params[:sale_item_id] + update_qty = params[:update_qty] + update_price = params[:update_price] + saleitemObj = SaleItem.find(saleitemId) + saleitemObj.remark = 'void' + saleitemObj.save + @newsaleitem = SaleItem.new + @newsaleitem = saleitemObj.dup + @newsaleitem.save + @newsaleitem.qty = update_qty + @newsaleitem.price = update_price + @newsaleitem.unit_price = update_price + @newsaleitem.taxable_price = update_price + @newsaleitem.is_taxable = 0 + @newsaleitem.remark = 'edit' + @newsaleitem.product_name = saleitemObj.product_name + " - updated" + @newsaleitem.save + end + # make cancel void item def item_void_cancel saleitemId = params[:sale_item_id] diff --git a/app/views/origami/sale_edit/edit.html.erb b/app/views/origami/sale_edit/edit.html.erb index 76bbeb08..13812e59 100644 --- a/app/views/origami/sale_edit/edit.html.erb +++ b/app/views/origami/sale_edit/edit.html.erb @@ -49,18 +49,18 @@ <%= count %> <%= sale_item.product_name %> - <% if sale_item.remark != 'void' %> - - + <% if sale_item.remark != 'void' && sale_item.remark != 'edit' %> + + - <% elsif sale_item.qty.to_i < 0 %> + <% elsif sale_item.qty.to_i < 0 || sale_item.remark == 'edit' %> - + <% else %> @@ -101,11 +101,14 @@ $(document).ready(function(){ $(".update").on('click',function() { var sale_item_id = $(this).attr('data-id'); - var ajax_url = "/origami/item_void"; + var qty = $('#'+sale_item_id + "_qty").val(); + var price = $('#'+ sale_item_id + "_price").val(); + console.log(qty + "|" + price) + var ajax_url = "/origami/item_edit"; $.ajax({ type: "POST", url: ajax_url, - data: 'order_id='+ order_id, + data: 'sale_item_id='+ sale_item_id + "&update_qty="+qty + "&update_price="+ price, success:function(result){ location.reload(); } diff --git a/config/routes.rb b/config/routes.rb index 35669703..544f67f3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -80,6 +80,7 @@ Rails.application.routes.draw do post 'moving' => "movetable#moving" get "/table/:table_id/sale/:sale_id/edit" => "sale_edit#edit" post 'item_void' => "sale_edit#item_void" + post 'item_edit' => "sale_edit#item_edit" post 'item_void_cancel' => "sale_edit#item_void_cancel" post 'cancel_all_void' => 'sale_edit#cancel_all_void' post 'apply_void' => 'sale_edit#apply_void' @@ -109,7 +110,7 @@ Rails.application.routes.draw do #---------Shift ---------------# resources :shifts, only: [:index, :new, :create, :edit] post 'close_shift' => 'shifts#update_shift' - get 'shift/close' => 'shifts#show' + get 'shift/close' => 'shifts#show' #shift - index (open/close shift landing page) #shift - show (sales summary display) #shift - new (open shift) diff --git a/lib/tasks/menu_import.rake b/lib/tasks/menu_import.rake index f229df94..9a287a2d 100644 --- a/lib/tasks/menu_import.rake +++ b/lib/tasks/menu_import.rake @@ -93,9 +93,9 @@ menu_category3 = MenuCategory.create({menu: menu, code:"C003", name: "Beef & Mut # Pork menu_category4 = MenuCategory.create({menu: menu, code:"C004", name: "Pork", alt_name: "Pork", order_by: 4,created_by: "SYSTEM DEFAULT"}) # Sliced Tenderloin Pork - menu_category1_menu_item13 = SimpleMenuItem.create({item_code:"01014", name: "Sliced Tenderloin Pork", alt_name: "Twin Pot",menu_category: menu_category4 , min_selectable_item: 1, max_selectable_item:1, account: food }) - menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Half Potion",item_instance_code:"II0212", menu_item: menu_category1_menu_item13, price:4000.00, is_on_promotion:false}]) - menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Full Potion",item_instance_code:"II0211", menu_item: menu_category1_menu_item13, price:8000.00, is_on_promotion:false}]) + menu_category1_menu_item137 = SimpleMenuItem.create({item_code:"01014", name: "Sliced Tenderloin Pork", alt_name: "Twin Pot",menu_category: menu_category4 , min_selectable_item: 1, max_selectable_item:1, account: food }) + menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Half Potion",item_instance_code:"II0212", menu_item: menu_category1_menu_item137, price:4000.00, is_on_promotion:false}]) + menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Full Potion",item_instance_code:"II0211", menu_item: menu_category1_menu_item137, price:8000.00, is_on_promotion:false}]) # Sliced Pork Belly menu_category1_menu_item14 = SimpleMenuItem.create({item_code:"01015", name: "Sliced Pork Belly", alt_name: "Twin Pot",menu_category: menu_category4 , min_selectable_item: 1, max_selectable_item:1, account: food }) menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Half Potion",item_instance_code:"II0222", menu_item: menu_category1_menu_item14, price:4000.00, is_on_promotion:false}]) @@ -475,7 +475,7 @@ menu_category14 = MenuCategory.create({menu: menu, code:"C0013", name: "Others", menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Half Potion",item_instance_code:"II1142", menu_item: menu_category1_menu_item106, price:1500.00, is_on_promotion:false}]) menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Full Potion",item_instance_code:"II1141", menu_item: menu_category1_menu_item106, price:3000.00, is_on_promotion:false}]) # Sliced Kelp - menu_category1_menu_item107 = SimpleMenuItem.create({item_code:"01108", name: "Sliced Kelp", alt_name: "Twin Pot",menu_category: menu_category14 , min_selectable_item: 1, max_selectable_item:1, account: food }) + menu_category1_menu_item107 = SimpleMenuItem.create({item_code:"01108", name: "Shredded Kelp", alt_name: "Twin Pot",menu_category: menu_category14 , min_selectable_item: 1, max_selectable_item:1, account: food }) menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Half Potion",item_instance_code:"II1152", menu_item: menu_category1_menu_item107, price:1800.00, is_on_promotion:false}]) menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Full Potion",item_instance_code:"II1151", menu_item: menu_category1_menu_item107, price:3600.00, is_on_promotion:false}]) # Crystal Vermicelli From b0ec03f5911925222e9087ae980ddfe144e949c8 Mon Sep 17 00:00:00 2001 From: Nweni Date: Sat, 1 Jul 2017 18:12:48 +0630 Subject: [PATCH 6/7] Update --- lib/tasks/menu_import.rake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/tasks/menu_import.rake b/lib/tasks/menu_import.rake index 9a287a2d..5db6231f 100644 --- a/lib/tasks/menu_import.rake +++ b/lib/tasks/menu_import.rake @@ -207,7 +207,7 @@ menu_category7 = MenuCategory.create({menu: menu, code:"C007", name: "Specialty # Seafood menu_category8 = MenuCategory.create({menu: menu, code:"C008", name: "Seafood", alt_name: "Seafood", order_by: 8,created_by: "SYSTEM DEFAULT"}) # Promfret - menu_category1_menu_item41 = SimpleMenuItem.create({item_code:"01042", name: "Promfret", alt_name: "Twin Pot",menu_category: menu_category7 , min_selectable_item: 1, max_selectable_item:1, account: food }) + menu_category1_menu_item41 = SimpleMenuItem.create({item_code:"01042", name: "Pomfret", alt_name: "Twin Pot",menu_category: menu_category7 , min_selectable_item: 1, max_selectable_item:1, account: food }) menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Half Potion",item_instance_code:"II0492", menu_item: menu_category1_menu_item41, price:30.00, is_on_promotion:false}]) menu_item0_instance = MenuItemInstance.create([{item_instance_name:"Full Potion",item_instance_code:"II0491", menu_item: menu_category1_menu_item41, price:30.00, is_on_promotion:false}]) # Garoupa @@ -280,13 +280,13 @@ menu_category8 = MenuCategory.create({menu: menu, code:"C008", name: "Seafood", menu_item0_instance = MenuItemInstance.create([{item_instance_name:"",item_instance_code:"II0661", menu_item: menu_category1_menu_item59, price:10.00, is_on_promotion:false}]) # Fresh Flower Crabs menu_category1_menu_item60 = SimpleMenuItem.create({item_code:"01061", name: "Fresh Flower Crabs", alt_name: "Twin Pot",menu_category: menu_category7 , min_selectable_item: 1, max_selectable_item:1, account: food }) - menu_item0_instance = MenuItemInstance.create([{item_instance_name:"",item_instance_code:"II0671", menu_item: menu_category1_menu_item60, price:10.00, is_on_promotion:false}]) + menu_item0_instance = MenuItemInstance.create([{item_instance_name:"",item_instance_code:"II0671", menu_item: menu_category1_menu_item60, price:60.00, is_on_promotion:false}]) # Live Lobster menu_category1_menu_item61 = SimpleMenuItem.create({item_code:"01062", name: "Live Lobster", alt_name: "Twin Pot",menu_category: menu_category7 , min_selectable_item: 1, max_selectable_item:1, account: food }) - menu_item0_instance = MenuItemInstance.create([{item_instance_name:"",item_instance_code:"II0681", menu_item: menu_category1_menu_item61, price:10.00, is_on_promotion:false}]) + menu_item0_instance = MenuItemInstance.create([{item_instance_name:"",item_instance_code:"II0681", menu_item: menu_category1_menu_item61, price:150.00, is_on_promotion:false}]) # Live Mantis menu_category1_menu_item62 = SimpleMenuItem.create({item_code:"01063", name: "Live Mantis Prawn", alt_name: "Twin Pot",menu_category: menu_category7 , min_selectable_item: 1, max_selectable_item:1, account: food }) - menu_item0_instance = MenuItemInstance.create([{item_instance_name:" ",item_instance_code:"II0691", menu_item: menu_category1_menu_item62, price:10.00, is_on_promotion:false}]) + menu_item0_instance = MenuItemInstance.create([{item_instance_name:" ",item_instance_code:"II0691", menu_item: menu_category1_menu_item62, price:150.00, is_on_promotion:false}]) # Dumpling menu_category9 = MenuCategory.create({menu: menu, code:"C009", name: "Dumpling", alt_name: "Chicken", order_by: 9, created_by: "SYSTEM DEFAULT"}) # Pork and Chives Dumpling From 740f585a315c47c76a18deb96542ec0ae12b6654 Mon Sep 17 00:00:00 2001 From: Aung Myo Date: Sat, 1 Jul 2017 18:19:41 +0630 Subject: [PATCH 7/7] update rounding adj --- .../origami/payments_controller.rb | 16 ++- app/models/ability.rb | 2 + app/models/printer/receipt_printer.rb | 10 ++ app/models/sale.rb | 4 +- app/pdf/close_cashier_pdf.rb | 109 ++++++++++++++++++ app/views/origami/home/show.html.erb | 11 +- app/views/origami/orders/show.html.erb | 11 +- app/views/origami/payments/show.html.erb | 8 +- .../origami/room_invoices/index.html.erb | 4 + app/views/origami/room_invoices/show.html.erb | 16 ++- app/views/origami/rooms/show.html.erb | 17 ++- app/views/origami/sales/show.html.erb | 4 + .../origami/table_invoices/index.html.erb | 4 + .../origami/table_invoices/show.html.erb | 21 +++- app/views/reports/dailysale/index.html.erb | 4 +- config/routes.rb | 1 + ...ales.rb => 20170701101420_create_sales.rb} | 3 +- 17 files changed, 230 insertions(+), 15 deletions(-) create mode 100644 app/pdf/close_cashier_pdf.rb rename db/migrate/{20170403160742_create_sales.rb => 20170701101420_create_sales.rb} (95%) diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 2cdd44b5..80b7eb20 100644 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -41,10 +41,10 @@ class Origami::PaymentsController < BaseOrigamiController sale_payment = SalePayment.new sale_payment.process_payment(saleObj, @user, cash, "cash") - new_total = Sale.get_rounding_adjustment(saleObj.grand_total) - rounding_adj = saleObj.grand_total - new_total + # new_total = Sale.get_rounding_adjustment(saleObj.grand_total) + # rounding_adj = saleObj.grand_total - new_total - saleObj.update_attributes(grand_total: new_total,rounding_adjustment:rounding_adj) + # saleObj.update_attributes(grand_total: new_total,rounding_adjustment:rounding_adj) rebate_amount = nil @@ -144,4 +144,14 @@ class Origami::PaymentsController < BaseOrigamiController printer = Printer::ReceiptPrinter.new(print_settings) printer.print_receipt_bill(print_settings,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details) end + + def rounding_adj + + saleObj = Sale.find(params[:sale_id]) + 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 diff --git a/app/models/ability.rb b/app/models/ability.rb index 9a7b5f6f..3e5fc8b6 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -52,6 +52,7 @@ class Ability can :show, :payment can :create, :payment can :reprint, :payment + can :rounding_adj, :payment can :move_dining, :movetable can :moving, :movetable @@ -88,6 +89,7 @@ class Ability can :show, :payment can :create, :payment can :reprint, :payment + can :rounding_adj, :payment can :move_dining, :movetable can :moving, :movetable diff --git a/app/models/printer/receipt_printer.rb b/app/models/printer/receipt_printer.rb index f8eb46d6..373e05ae 100644 --- a/app/models/printer/receipt_printer.rb +++ b/app/models/printer/receipt_printer.rb @@ -80,6 +80,16 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker end until count == 0 end + #Bill Receipt Print + def print_close_cashier(printer_settings,shift_sale,shop_details) + #Use CUPS service + #Generate PDF + #Print + pdf = CloseCashierPdf.new(printer_settings,shift_sale,shop_details) + pdf.render_file "tmp/print_close_cashier.pdf" + self.print("tmp/print_close_cashier.pdf") + end + #Queue No Print def print_queue_no(printer_settings,queue) #Use CUPS service diff --git a/app/models/sale.rb b/app/models/sale.rb index 25a2d714..60b471dd 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -92,7 +92,6 @@ class Sale < ApplicationRecord link_order_sale(order.id) end - self.save! #compute sales summary @@ -379,6 +378,7 @@ class Sale < ApplicationRecord 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 old_grand_total else 0 end),0) as old_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") @@ -386,6 +386,7 @@ class Sale < ApplicationRecord total_sale.each do |sale| grand_total = sale.grand_total + old_grand_total = sale.old_grand_total total_discount = sale.total_discount void_amount = sale.void_amount total = {:sale_date => pay.sale_date, @@ -399,6 +400,7 @@ class Sale < ApplicationRecord :foc_amount => pay.foc_amount, :total_discount => total_discount, :grand_total => grand_total, + :old_grand_total => old_grand_total, :void_amount => void_amount, :rounding_adj => sale.rounding_adj} daily_total.push(total) diff --git a/app/pdf/close_cashier_pdf.rb b/app/pdf/close_cashier_pdf.rb new file mode 100644 index 00000000..3223c4b3 --- /dev/null +++ b/app/pdf/close_cashier_pdf.rb @@ -0,0 +1,109 @@ +class CloseCashierPdf < Prawn::Document + 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 + def initialize(printer_settings, shift_sale,shop_details) + self.page_width = 210 + self.page_height = 7000 + self.margin = 5 + self.price_width = 40 + self.qty_width = 20 + self.total_width = 40 + self.item_width = self.page_width - ((self.price_width + self.qty_width + self.total_width)) + self.item_height = 15 + self.item_description_width = (self.page_width-20) / 2 + self.label_width = 100 + # @item_width = self.page_width.to_i / 2 + # @qty_width = @item_width.to_i / 3 + # @double = @qty_width * 1.3 + # @half_qty = @qty_width / 2 + #setting page margin and width + super(:margin => [printer_settings.heading_space, self.margin, self.margin, self.margin], :page_size => [self.page_width, self.page_height]) + + # font "public/fonts/#{font_name}".to_s + ".ttf".to_s + # font "public/fonts/Zawgyi-One.ttf" + # font "public/fonts/padauk.ttf" + self.header_font_size = 10 + self.item_font_size = 8 + + + + header( shop_details) + + stroke_horizontal_rule + + cashier_info(shift_sale) + + footer + + + end + + def header (shop_details) + move_down 7 + text "#{shop_details.name}", :left_margin => -10, :size => self.header_font_size,:align => :center + move_down 5 + text "#{shop_details.address}", :size => self.item_font_size,:align => :center + # move_down self.item_height + move_down 5 + text "#{shop_details.phone_no}", :size => self.item_font_size,:align => :center + move_down 5 + + stroke_horizontal_rule + end + + def cashier_info(shift_sale) + move_down 7 + # move_down 2 + y_position = cursor + bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do + text "Cashier: #{shift_sale.receipt_no}", :size => self.item_font_size,:align => :left + end + bounding_box([self.label_width,y_position], :width => self.label_width, :height => self.item_height) do + text "#{ shift_sale.bookings[0].dining_facility.type } - #{ sale_data.bookings[0].dining_facility.name }" , :size => self.item_font_size,:align => :right + end + move_down 5 + + y_position = cursor + bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do + text "Cashier Station Sta: #{shift_sale.receipt_no}", :size => self.item_font_size,:align => :left + end + bounding_box([self.label_width,y_position], :width => self.label_width, :height => self.item_height) do + text "#{ shift_sale.bookings[0].dining_facility.type } - #{ sale_data.bookings[0].dining_facility.name }" , :size => self.item_font_size,:align => :right + end + + move_down 5 + y_position = cursor + bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do + text "Opening Date", :size => self.item_font_size,:align => :left + end + bounding_box([self.label_width,y_position], :width => self.label_width, :height => self.item_height) do + text "#{ shift_sale.bookings[0].dining_facility.type } - #{ sale_data.bookings[0].dining_facility.name }" , :size => self.item_font_size,:align => :right + end + move_down 5 + + y_position = cursor + bounding_box([0,y_position], :width =>self.label_width, :height => self.item_height) do + text "Closing Date: #{shift_sale.receipt_no}", :size => self.item_font_size,:align => :left + end + bounding_box([self.label_width,y_position], :width => self.label_width, :height => self.item_height) do + text "#{ shift_sale.bookings[0].dining_facility.type } - #{ sale_data.bookings[0].dining_facility.name }" , :size => self.item_font_size,:align => :right + end + + + move_down 5 + + end + + + + def footer + move_down 5 + stroke_horizontal_rule + move_down 5 + + text "Thank You! See you Again", :left_margin => -10, :size => self.header_font_size,:align => :center + + move_down 5 + end + +end + diff --git a/app/views/origami/home/show.html.erb b/app/views/origami/home/show.html.erb index f89560f3..a8670e12 100644 --- a/app/views/origami/home/show.html.erb +++ b/app/views/origami/home/show.html.erb @@ -447,7 +447,16 @@ $("#first_bill").on('click', function(){ $('#pay').on('click',function() { var sale_id = $('#sale_id').val(); - window.location.href = '/origami/sale/'+ sale_id + "/payment"; + var url = '/origami/sale/'+ sale_id + "/rounding_adj" ; + + $.ajax({ + type: "POST", + url: '/origami/sale/'+ sale_id + "/rounding_adj", + success:function(result){ + window.location.href = '/origami/sale/'+ sale_id + "/payment"; + } + }); + }); // Bill Request diff --git a/app/views/origami/orders/show.html.erb b/app/views/origami/orders/show.html.erb index 3a34c1df..e0448009 100644 --- a/app/views/origami/orders/show.html.erb +++ b/app/views/origami/orders/show.html.erb @@ -215,7 +215,16 @@ $(document).ready(function(){ }); $('#pay').on('click',function() { var sale_id = $('#sale_id').val(); - window.location.href = '/origami/sale/'+ sale_id + "/payment"; + var url = '/origami/sale/'+ sale_id + "/rounding_adj" ; + alert(url) + $.ajax({ + type: "POST", + url: '/origami/sale/'+ sale_id + "/rounding_adj", + success:function(result){ + window.location.href = '/origami/sale/'+ sale_id + "/payment"; + } + }); + }); $('#back').on('click',function(){ window.location.href = '/origami/'; diff --git a/app/views/origami/payments/show.html.erb b/app/views/origami/payments/show.html.erb index 4004e9cf..a9a542b6 100644 --- a/app/views/origami/payments/show.html.erb +++ b/app/views/origami/payments/show.html.erb @@ -70,14 +70,20 @@ (Discount) (<%=@sale_data.total_discount rescue 0%>) + Tax <%=@sale_data.total_tax rescue 0%> + + Rounding Adj: + <%=@sale_data.rounding_adjustment rescue 0%> + + Grand Total <%=@sale_data.grand_total rescue 0%> <%if @balance > 0%> - + <%= @accountable_type %> <%=@balance%> diff --git a/app/views/origami/room_invoices/index.html.erb b/app/views/origami/room_invoices/index.html.erb index 011aff11..71b9bee7 100644 --- a/app/views/origami/room_invoices/index.html.erb +++ b/app/views/origami/room_invoices/index.html.erb @@ -46,6 +46,10 @@ Tax: <%= @sale.total_tax rescue 0%> + + + Rounding Adj: + <%= @sale.rounding_adjustment rescue 0%> Grand Total: diff --git a/app/views/origami/room_invoices/show.html.erb b/app/views/origami/room_invoices/show.html.erb index 7ea799ae..4b507526 100644 --- a/app/views/origami/room_invoices/show.html.erb +++ b/app/views/origami/room_invoices/show.html.erb @@ -112,6 +112,10 @@ Tax: <%= @sale.total_tax rescue 0%> + + + Rounding Adj: + <%= @sale.rounding_adjustment rescue 0%> Grand Total: @@ -139,7 +143,17 @@ $(document).ready(function(){ }); $('#pay').on('click',function() { - window.location.href = '/origami/sale/<%= @sale.id %>/payment'; + var sale_id = '<%= @sale.id %>'; + var url = '/origami/sale/'+ sale_id + "/rounding_adj" ; + alert(url) + $.ajax({ + type: "POST", + url: '/origami/sale/'+ sale_id + "/rounding_adj", + success:function(result){ + window.location.href = '/origami/sale/'+ sale_id + "/payment"; + } + }); + }); $('#back').on('click',function(){ window.location.href = '/origami/table/<%= @room.id %>'; diff --git a/app/views/origami/rooms/show.html.erb b/app/views/origami/rooms/show.html.erb index 36ae77c5..76c4da71 100644 --- a/app/views/origami/rooms/show.html.erb +++ b/app/views/origami/rooms/show.html.erb @@ -203,6 +203,10 @@ Tax: <%= @obj.total_tax rescue 0%> + + + Rounding Adj: + <%= @obj.rounding_adjustment rescue 0%> Grand Total: @@ -424,12 +428,19 @@ $("#first_bill").on('click', function(){ }); }); - $('#pay').on('click',function() { var sale_id = $('#sale_id').val(); - window.location.href = '/origami/sale/'+ sale_id + "/payment"; + var url = '/origami/sale/'+ sale_id + "/rounding_adj" ; + alert(url) + $.ajax({ + type: "POST", + url: '/origami/sale/'+ sale_id + "/rounding_adj", + success:function(result){ + window.location.href = '/origami/sale/'+ sale_id + "/payment"; + } + }); + }); - // Bill Request $('#request_bills').click(function() { var order_id = $('#save_order_id').attr('data-order'); diff --git a/app/views/origami/sales/show.html.erb b/app/views/origami/sales/show.html.erb index d768240c..86a82053 100644 --- a/app/views/origami/sales/show.html.erb +++ b/app/views/origami/sales/show.html.erb @@ -171,6 +171,10 @@ Tax: <%= @sale.total_tax rescue 0%> + + Rounding Adj: + <%= @sale.rounding_adjustment rescue 0%> + Grand Total: <%= @sale.grand_total rescue 0%> diff --git a/app/views/origami/table_invoices/index.html.erb b/app/views/origami/table_invoices/index.html.erb index d5cbe84d..95a6ee33 100644 --- a/app/views/origami/table_invoices/index.html.erb +++ b/app/views/origami/table_invoices/index.html.erb @@ -46,6 +46,10 @@ Tax: <%= @sale.total_tax rescue 0%> + + + Rounding Adj: + <%= @obj_sale.rounding_adjustment rescue 0%> Grand Total: diff --git a/app/views/origami/table_invoices/show.html.erb b/app/views/origami/table_invoices/show.html.erb index ade1f021..de43e654 100644 --- a/app/views/origami/table_invoices/show.html.erb +++ b/app/views/origami/table_invoices/show.html.erb @@ -112,6 +112,10 @@ Tax: <%= @sale.total_tax rescue 0%> + + + Rounding Adj: + <%= @obj_sale.rounding_adjustment rescue 0%> Grand Total: @@ -139,8 +143,23 @@ $(document).ready(function(){ }) }); +// $('#pay').on('click',function() { +// window.location.href = '/origami/sale/<%= @sale.id %>/payment'; +// }); + $('#pay').on('click',function() { - window.location.href = '/origami/sale/<%= @sale.id %>/payment'; + var sale_id = '<%= @sale.id %>'; + + var url = '<%= @calculate_rouding_adj_path %>'; + + $.ajax({ + type: "GET", + url: url, + success:function(result){ + // location.reload(); + } + }); + window.location.href = '/origami/sale/'+ sale_id + "/payment"; }); $('#back').on('click',function(){ window.location.href = '/origami/table/<%= @table.id %>'; diff --git a/app/views/reports/dailysale/index.html.erb b/app/views/reports/dailysale/index.html.erb index 5c42d6dc..64565fb5 100644 --- a/app/views/reports/dailysale/index.html.erb +++ b/app/views/reports/dailysale/index.html.erb @@ -74,7 +74,7 @@ <% credit += sale[:credit_amount] %> <% foc += sale[:foc_amount] %> <% discount += sale[:total_discount] %> - <% total += sale[:grand_total].to_f + sale[:rounding_adj].to_f %> + <% total += sale[:old_grand_total].to_f + sale[:rounding_adj].to_f %> <% grand_total += sale[:grand_total].to_f %> <% rounding_adj += sale[:rounding_adj].to_f %> @@ -90,7 +90,7 @@ <%= number_with_delimiter(sprintf("%.2f",sale[:credit_amount]), :delimiter => ',') rescue '-'%> <%= number_with_delimiter(sprintf("%.2f",sale[:foc_amount]), :delimiter => ',') rescue '-'%> (<%= number_with_delimiter(sprintf("%.2f",sale[:total_discount]), :delimiter => ',') rescue '-'%>) - <%= number_with_delimiter(sprintf("%.2f",sale[:grand_total].to_f + sale[:rounding_adj].to_f ), :delimiter => ',') rescue '-'%> + <%= number_with_delimiter(sprintf("%.2f",sale[:old_grand_total].to_f + sale[:rounding_adj].to_f ), :delimiter => ',') rescue '-'%> <%= number_with_delimiter(sprintf("%.2f",sale[:rounding_adj].to_f), :delimiter => ',') rescue '-'%> <%= number_with_delimiter(sprintf("%.2f",sale[:grand_total]), :delimiter => ',') rescue '-'%> diff --git a/config/routes.rb b/config/routes.rb index 35669703..a432c761 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -121,6 +121,7 @@ Rails.application.routes.draw do #payment - Outing payments - Cash only [ *Misc expeness tracking] #--------- Payment ------------# + post 'sale/:sale_id/rounding_adj' => 'payments#rounding_adj',:as => "calculate_rouding_adjs" get 'sale/:sale_id/first_bill' => 'payments#first_bill', :defaults => { :format => 'json' } get 'sale/:sale_id/payment' => 'payments#show' diff --git a/db/migrate/20170403160742_create_sales.rb b/db/migrate/20170701101420_create_sales.rb similarity index 95% rename from db/migrate/20170403160742_create_sales.rb rename to db/migrate/20170701101420_create_sales.rb index ae806472..fc261826 100644 --- a/db/migrate/20170403160742_create_sales.rb +++ b/db/migrate/20170701101420_create_sales.rb @@ -20,7 +20,8 @@ class CreateSales < ActiveRecord::Migration[5.1] t.decimal :rounding_adjustment, :precision => 10, :scale => 2, :null => false, :default => 0.00 t.decimal :amount_received, :precision => 10, :scale => 2, :null => false, :default => 0.00 t.decimal :amount_changed, :precision => 10, :scale => 2, :null => false, :default => 0.00 - t.integer :shift_sale_id, :null => false + t.integer :shift_sale_id + t.decimal :old_grand_total t.timestamps end end