update shift close print
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -22,10 +22,10 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
sale = Sale.find(sale_id)
|
||||
table_id = sale.bookings[0].dining_facility_id
|
||||
table_type = DiningFacility.find(table_id).type
|
||||
sale.total_discount = overall_discount.to_f
|
||||
sale.total_amount = sub_total.to_f
|
||||
sale.grand_total = (sub_total.to_f - overall_discount.to_f) + sale.total_tax;
|
||||
sale.save
|
||||
# sale.total_discount = overall_discount.to_f
|
||||
# sale.total_amount = sub_total.to_f
|
||||
# sale.grand_total = (sub_total.to_f - overall_discount.to_f) + sale.total_tax;
|
||||
# sale.save
|
||||
if discount_items.length > 0
|
||||
#save sale item for discount
|
||||
discount_items.each do |di|
|
||||
@@ -35,6 +35,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
sale_item.sale_id = sale_id
|
||||
sale_item.product_code = origin_sale_item != nil ? origin_sale_item.product_code : sale_id
|
||||
sale_item.product_name = di["name"]
|
||||
sale_item.product_alt_name = ""
|
||||
sale_item.remark = "Discount"
|
||||
|
||||
sale_item.qty = 1
|
||||
@@ -45,7 +46,10 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
sale_item.price = di["price"]
|
||||
sale_item.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Re-calc All Amount in Sale
|
||||
sale.compute_by_sale_items(sale_id, sale.sale_items, overall_discount.to_f)
|
||||
end
|
||||
|
||||
dining = {:table_id => table_id, :table_type => table_type }
|
||||
|
||||
@@ -16,10 +16,11 @@ class Origami::OtherChargesController < BaseOrigamiController
|
||||
if Sale.exists?(sale_id)
|
||||
sale = Sale.find(sale_id)
|
||||
table_id = sale.bookings[0].dining_facility_id
|
||||
table_type = DiningFacility.find(table_id).type
|
||||
sale.total_amount = sub_total.to_f
|
||||
sale.grand_total = sub_total.to_f + sale.total_tax;
|
||||
sale.save
|
||||
table_type = DiningFacility.find(table_id).type
|
||||
|
||||
# sale.total_amount = sub_total.to_f
|
||||
# sale.grand_total = sub_total.to_f + sale.total_tax;
|
||||
# sale.save
|
||||
if other_charges_items.length > 0
|
||||
#save sale item for discount
|
||||
other_charges_items.each do |di|
|
||||
@@ -34,14 +35,17 @@ class Origami::OtherChargesController < BaseOrigamiController
|
||||
|
||||
sale_item.qty = 1
|
||||
sale_item.unit_price = di["price"]
|
||||
sale_item.taxable_price = di["price"]
|
||||
sale_item.taxable_price = 0
|
||||
sale_item.is_taxable = 0
|
||||
|
||||
sale_item.price = di["price"]
|
||||
sale_item.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Re-calc All Amount in Sale
|
||||
sale.compute_by_sale_items(sale_id, sale.sale_items, sale.total_discount)
|
||||
end
|
||||
|
||||
dining = {:table_id => table_id, :table_type => table_type }
|
||||
render :json => dining.to_json
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -26,6 +26,9 @@ class Origami::SalesController < BaseOrigamiController
|
||||
order.order_items.each do |orer_item|
|
||||
saleobj.add_item (orer_item)
|
||||
end
|
||||
|
||||
# Re-compute for add
|
||||
saleobj.compute
|
||||
saleobj.save
|
||||
order.save
|
||||
booking.save
|
||||
|
||||
@@ -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
|
||||
@@ -27,10 +27,21 @@ class Origami::ShiftsController < BaseOrigamiController
|
||||
@shift.shift_closed_at = DateTime.now.utc
|
||||
@shift.closing_balance = closing_balance.to_f
|
||||
@shift.save
|
||||
end
|
||||
end
|
||||
|
||||
unique_code = "CloseCashierPdf"
|
||||
shop_details = Shop.find(1)
|
||||
# get printer info
|
||||
print_settings=PrintSetting.find_by_unique_code(unique_code)
|
||||
|
||||
printer = Printer::CashierStationPrinter.new(print_settings)
|
||||
|
||||
printer.print_close_cashier(print_settings,@shift,shop_details)
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def edit
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -11,14 +11,24 @@ class Printer::CashierStationPrinter < Printer::PrinterWorker
|
||||
self.print("tmp/cashier_station_#{order_id}_closing_#{time}.pdf")
|
||||
end
|
||||
|
||||
def print_close_cashier(receipt_no)
|
||||
# def print_close_cashier(receipt_no)
|
||||
# #Use CUPS service
|
||||
# #Generate PDF
|
||||
# time = DateTime.now
|
||||
# #Print
|
||||
# pdf = CashierStationClosing.new
|
||||
# pdf.render_file "tmp/cashier_station_#{order_id}_closing_#{time}.pdf"
|
||||
# self.print("tmp/receipt.pdf")
|
||||
# end
|
||||
|
||||
#Bill Receipt Print
|
||||
def print_close_cashier(printer_settings,shift_sale,shop_details)
|
||||
#Use CUPS service
|
||||
#Generate PDF
|
||||
time = DateTime.now
|
||||
#Print
|
||||
pdf = CashierStationClosing.new
|
||||
pdf.render_file "tmp/cashier_station_#{order_id}_closing_#{time}.pdf"
|
||||
self.print("tmp/receipt.pdf")
|
||||
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
|
||||
|
||||
|
||||
|
||||
@@ -80,16 +80,6 @@ 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
|
||||
|
||||
@@ -41,8 +41,10 @@ class Sale < ApplicationRecord
|
||||
end
|
||||
booking.sale_id = sale_id
|
||||
end
|
||||
|
||||
order = booking.booking_orders.take.order
|
||||
link_order_sale(order.id)
|
||||
|
||||
return status, sale_id
|
||||
end
|
||||
end
|
||||
@@ -205,6 +207,33 @@ class Sale < ApplicationRecord
|
||||
|
||||
end
|
||||
|
||||
#compute - invoice total
|
||||
def compute_by_sale_items(sale_id, sale_itemss, total_discount)
|
||||
sale = Sale.find(sale_id)
|
||||
sales_items = sale_itemss
|
||||
|
||||
#Computation Fields
|
||||
subtotal_price = 0
|
||||
total_taxable = 0
|
||||
rounding_adjustment = 0
|
||||
|
||||
sales_items.each do |item|
|
||||
#compute each item and added to total
|
||||
subtotal_price = subtotal_price + item.price
|
||||
total_taxable = total_taxable + (item.taxable_price * item.qty)
|
||||
end
|
||||
|
||||
compute_tax(sale, total_taxable)
|
||||
sale.total_amount = subtotal_price
|
||||
sale.total_discount = total_discount
|
||||
sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax
|
||||
#compute rounding adjustment
|
||||
# adjust_rounding
|
||||
|
||||
sale.save!
|
||||
|
||||
end
|
||||
|
||||
def compute_without_void
|
||||
sales_items = self.sale_items
|
||||
|
||||
@@ -230,6 +259,39 @@ class Sale < ApplicationRecord
|
||||
|
||||
self.save!
|
||||
end
|
||||
|
||||
# Tax Re-Calculte
|
||||
def compute_tax(sale, total_taxable)
|
||||
#if tax is not apply create new record
|
||||
SaleTax.where("sale_id='#{sale.sale_id}'").find_each do |existing_tax|
|
||||
#delete existing and create new
|
||||
existing_tax.delete
|
||||
end
|
||||
|
||||
total_tax_amount = 0
|
||||
#tax_profile - list by order_by
|
||||
tax_profiles = TaxProfile.all.order("order_by asc")
|
||||
|
||||
# #Creat new tax records
|
||||
tax_profiles.each do |tax|
|
||||
sale_tax = SaleTax.new(:sale => sale)
|
||||
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 / 100
|
||||
#new taxable amount
|
||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||
|
||||
sale_tax.inclusive = tax.inclusive
|
||||
sale_tax.save
|
||||
|
||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||
end
|
||||
|
||||
sale.total_tax = total_tax_amount
|
||||
end
|
||||
|
||||
# Tax Calculate
|
||||
def apply_tax(total_taxable)
|
||||
#if tax is not apply create new record
|
||||
@@ -344,8 +406,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
|
||||
@@ -538,11 +600,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
|
||||
|
||||
private
|
||||
|
||||
@@ -54,6 +54,14 @@ class SalePayment < ApplicationRecord
|
||||
remark = "Payment #{payment_method}- for Invoice #{invoice.receipt_no} Due [#{amount_due}]| pay amount -> #{cash_amount} | Payment Status ->#{payment_status}"
|
||||
sale_audit = SaleAudit.record_payment(invoice.id, remark, action_by)
|
||||
|
||||
# update complete order items in oqs
|
||||
SaleOrder.where("sale_id = '#{ invoice.sale_id }'").find_each do |sodr|
|
||||
AssignedOrderItem.where("order_id = '#{ sodr.order_id }'").find_each do |aoi|
|
||||
aoi.delivery_status = 1
|
||||
aoi.save
|
||||
end
|
||||
end
|
||||
|
||||
return true, self.save
|
||||
else
|
||||
#record an payment in sale-audit
|
||||
@@ -266,6 +274,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 +334,7 @@ class SalePayment < ApplicationRecord
|
||||
}, :timeout => 10)
|
||||
rescue Net::OpenTimeout
|
||||
response = { status: false }
|
||||
|
||||
|
||||
rescue OpenURI::HTTPError
|
||||
response = { status: false}
|
||||
|
||||
|
||||
@@ -20,16 +20,18 @@ class ShiftSale < ApplicationRecord
|
||||
#if current_user
|
||||
#find open shift where is open today and is not closed and login by current cashier
|
||||
today_date = DateTime.now.strftime("%Y-%m-%d")
|
||||
puts today_date
|
||||
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
|
||||
# puts today_date
|
||||
# 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
|
||||
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
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
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
|
||||
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,:text_width
|
||||
def initialize(printer_settings, shift_sale,shop_details)
|
||||
self.page_width = 210
|
||||
self.page_height = 7000
|
||||
@@ -11,6 +11,8 @@ class CloseCashierPdf < Prawn::Document
|
||||
self.item_height = 15
|
||||
self.item_description_width = (self.page_width-20) / 2
|
||||
self.label_width = 100
|
||||
|
||||
self.text_width = (self.page_width - 80) - self.price_width / 3
|
||||
# @item_width = self.page_width.to_i / 2
|
||||
# @qty_width = @item_width.to_i / 3
|
||||
# @double = @qty_width * 1.3
|
||||
@@ -30,9 +32,8 @@ class CloseCashierPdf < Prawn::Document
|
||||
|
||||
stroke_horizontal_rule
|
||||
|
||||
cashier_info(shift_sale)
|
||||
shift_detail(shift_sale)
|
||||
|
||||
footer
|
||||
|
||||
|
||||
end
|
||||
@@ -50,60 +51,126 @@ class CloseCashierPdf < Prawn::Document
|
||||
stroke_horizontal_rule
|
||||
end
|
||||
|
||||
def cashier_info(shift_sale)
|
||||
def shift_detail(shift_sale)
|
||||
move_down 7
|
||||
# move_down 2
|
||||
y_position = cursor
|
||||
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
|
||||
text "Cashier : ", :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
|
||||
text "#{ shift_sale.employee.name}" , :size => self.item_font_size,:align => :left
|
||||
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
|
||||
text "Cashier Station : ", :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
|
||||
text "#{ shift_sale.cashier_terminal.name}" , :size => self.item_font_size,:align => :left
|
||||
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
|
||||
text "Opening Float : ", :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
|
||||
text "#{ shift_sale.opening_balance}" , :size => self.item_font_size,:align => :left
|
||||
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
|
||||
text "Closing Float : ", :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
|
||||
text "#{ shift_sale.closing_balance}" , :size => self.item_font_size,:align => :left
|
||||
end
|
||||
|
||||
|
||||
move_down 10
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Received Amount :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.closing_balance}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Net Sales:", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.nett_sales}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Total Tax :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.total_taxes}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Cash Payment :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.cash_sales}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Credit Payment :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.credit_sales}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Other Payment :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.other_sales}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Total Sale :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.total_revenue}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Discount Amount :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.total_discounts}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Commercial Tax :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.commercial_taxes}", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width =>self.item_description_width, :height => 20) do
|
||||
text "Grand Total :", :size => self.item_font_size, :align => :right
|
||||
end
|
||||
bounding_box([self.item_description_width,y_position], :width =>self.price_width, :height => 20) do
|
||||
text "#{shift_sale.grand_total}", :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
|
||||
|
||||
|
||||
@@ -24,26 +24,21 @@
|
||||
<button class='btn btn-primary payment-type' data-id='jcb' id='jcb'>JCB</button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> Reference Number
|
||||
</td>
|
||||
<td><input type='text' id='payment_method_reference'/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> Amount
|
||||
</td>
|
||||
<td><input type='text' id='amount'/></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class='row'>
|
||||
<div class='col-md-2'></div>
|
||||
<div class='col-md-2'>Reference Number </div>
|
||||
<div class='col-md-4'><input type='text' id='payment_method_reference'/> </div>
|
||||
</div>
|
||||
<br>
|
||||
<div class='row'>
|
||||
<div class='col-md-2'></div>
|
||||
<div class='col-md-2'>Amount</div>
|
||||
<div class='col-md-4'><input type='text' id='amount'/></div>
|
||||
</div>
|
||||
<br><br>
|
||||
<div class='row'>
|
||||
<div class='col-md-3'></div>
|
||||
<div class='col-md-4'><button class='btn btn-primary btn-lg' id='cash_in' style='width:200px;'> Cash In</button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-1 col-md-1 col-sm-1">
|
||||
<button class='btn btn-primary ' id='cash_in' style='width:100px;'> Back </button>
|
||||
<button type="button" class="btn btn-primary btn-block" id='back'> Back </button>
|
||||
<button type="button" class="btn btn-primary btn-block" id='cash_in'> Cash In </button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -76,4 +71,7 @@ $('#cash_in').on('click',function(){
|
||||
}
|
||||
});
|
||||
})
|
||||
$('#back').on('click',function(){
|
||||
window.location.href = '/origami';
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
<h2>Payment Debit</h2>
|
||||
|
||||
|
||||
<div class='row'>
|
||||
<div class='col-md-9'>
|
||||
<div class="col-lg-11 col-md-11 col-sm-11">
|
||||
<h2>Payment Debit</h2>
|
||||
<table class='table table-striped'>
|
||||
<tr>
|
||||
<td> Payment Reference
|
||||
@@ -20,13 +22,12 @@
|
||||
</table>
|
||||
|
||||
</div>
|
||||
<div class="col-lg-1 col-md-1 col-sm-1">
|
||||
<button type="button" class="btn btn-primary btn-block" id='back'> Back </button>
|
||||
<button type="button" class="btn btn-primary btn-block" id='cash_out'> Cash Out </button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<br><br>
|
||||
<div class='row'>
|
||||
<div class='col-md-3'></div>
|
||||
<div class='col-md-4'><button class='btn btn-primary btn-lg' id='cash_out'> Cash Out</button></div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
$('#cash_out').on('click',function(){
|
||||
@@ -41,4 +42,8 @@ $('#cash_out').on('click',function(){
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
$('#back').on('click',function(){
|
||||
window.location.href = '/origami';
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -194,10 +194,10 @@
|
||||
<div class="col-md-4" id="mastercount">0.0</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<hr class="style2">
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="col-md-8">Balance</div>
|
||||
<div class="col-md-4"><span id='balance'><%= @sale_data.grand_total %></span></div>
|
||||
<div class="col-md-8"><strong style="font-size:18px;">Balance</strong></div>
|
||||
<div class="col-md-4"><strong style="font-size:18px;"><span id='balance'><%= @sale_data.grand_total %></span></strong></div>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
|
||||
@@ -49,18 +49,18 @@
|
||||
<tr>
|
||||
<td><%= count %></td>
|
||||
<td class='item-name'><%= sale_item.product_name %></td>
|
||||
<% if sale_item.remark != 'void' %>
|
||||
<td class='item-attr-edit'><input data-id ="<%= sale_item.id %>" type="text" value="<%= sale_item.qty %>" /></td>
|
||||
<td class='item-attr-edit'><input data-id ="<%= sale_item.id %>" type="text" value="<%= sale_item.price %>" /></td>
|
||||
<% if sale_item.remark != 'void' && sale_item.remark != 'edit' %>
|
||||
<td class='item-attr-edit'><input id="<%= sale_item.id%>_qty" data-id ="<%= sale_item.id %>" type="text" value="<%= sale_item.qty %>" /></td>
|
||||
<td class='item-attr-edit'><input id="<%= sale_item.id%>_price" data-id ="<%= sale_item.id %>" type="text" value="<%= sale_item.price %>" /></td>
|
||||
<td class='item-attr'>
|
||||
<button data-id ="<%= sale_item.id %>" class='btn btn-primary btn-sm update'>Update</button>
|
||||
<button data-id ="<%= sale_item.id %>" class='btn btn-danger btn-sm void'>Void</button></td>
|
||||
</td>
|
||||
<% elsif sale_item.qty.to_i < 0 %>
|
||||
<% elsif sale_item.qty.to_i < 0 || sale_item.remark == 'edit' %>
|
||||
<td class='item-attr-edit'><input data-id ="<%= sale_item.id %>" type="text" value="<%= sale_item.qty %>" disabled/></td>
|
||||
<td class='item-attr-edit'><input data-id ="<%= sale_item.id %>" type="text" value="<%= sale_item.price %>" disabled/></td>
|
||||
<td class='item-attr'>
|
||||
<button data-id ="<%= sale_item.id %>" class='btn btn-primary btn-sm cancel'>Cancel Void</button>
|
||||
<button data-id ="<%= sale_item.id %>" class='btn btn-primary btn-sm cancel'>Cancel Void/Update</button>
|
||||
</td>
|
||||
<% else %>
|
||||
<td class='item-attr-edit'><input data-id ="<%= sale_item.id %>" type="text" value="<%= sale_item.qty %>" disabled/></td>
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -1,16 +1,23 @@
|
||||
<h1>Open Cashier</h1>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<table class='table table-striped'>
|
||||
<tr>
|
||||
<th>Cashier Terminal</th>
|
||||
<th>
|
||||
<select class='form-control' id='cashier_terminal'>
|
||||
<% @terminal.each do |ter| %>
|
||||
<option value="<%= ter.id %>"><%= ter.name %></option>
|
||||
<% end %>
|
||||
</select>
|
||||
</th>
|
||||
</tr>
|
||||
<% @float.each do |float| %>
|
||||
<tr>
|
||||
<th><%= float.name %></th>
|
||||
<th><input class='float-value' type='text' data-value ="<%= float.value %>" value='' /></th>
|
||||
<th><input class='float-value' type='text' data-value ="<%= float.value %>" value='0' id='<%= float.value %>'></input></th>
|
||||
</tr>
|
||||
<% end %>
|
||||
<tr>
|
||||
@@ -18,12 +25,7 @@
|
||||
<th><div id='total'></div></th>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class='col-md-4'></div>
|
||||
<div class='col-md-2'>
|
||||
<button class='btn btn-primary' id='open_cashier'>Open Cashier</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class='col-md-8'>
|
||||
<div class="row">
|
||||
@@ -49,9 +51,9 @@
|
||||
<div class=" cashier_number left" data-value="00" data-type="num">00</div>
|
||||
</div>
|
||||
<div class="row bottom">
|
||||
<div class=" cashier_number red" data-type="del" >Del</div>
|
||||
<div class=" cashier_number orange left" data-type="clr">Clr</div>
|
||||
<div class=" cashier_number purple left" data-type="ent">Ent</div>
|
||||
<div class=" cashier_number orange " data-type="clr">Clr</div>
|
||||
<div class=" cashier_number left" data-type='ent' >Calculate</div>
|
||||
<div class=" cashier_number purple left" id="open_cashier">Open Cashier</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -60,19 +62,58 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var total = 0
|
||||
$(document).on('focusout', '.float-value', function(event){
|
||||
var input_type = $(this).attr("data-value");
|
||||
var count = $(this).val();
|
||||
total += input_type * count
|
||||
$('#total').text(total)
|
||||
|
||||
var float_value = ""
|
||||
var total = 0
|
||||
|
||||
$(document).on('focusout', '.float-value', function(event){
|
||||
float_value = $(this).attr("data-value");
|
||||
$(document).on('click', '.cashier_number', function(event){
|
||||
if(event.handled !== true) {
|
||||
var input_type = $(this).attr("data-type");
|
||||
switch (input_type) {
|
||||
case 'num':
|
||||
var input_value = $(this).attr("data-value");
|
||||
var original = $('#'+float_value).val();
|
||||
if (original == "0"){
|
||||
$('#'+float_value).val(input_value);
|
||||
}else{
|
||||
$('#'+float_value).val(original + input_value);
|
||||
}
|
||||
break;
|
||||
case 'clr':
|
||||
$('#'+float_value).val("0");
|
||||
break;
|
||||
case 'ent':
|
||||
var sum = 0
|
||||
<%
|
||||
sum = 0
|
||||
@float.each do |float|
|
||||
%>
|
||||
var float = "<%= float.value %>"
|
||||
console.log(float)
|
||||
var cal = $('#'+ float).val() * float
|
||||
sum += cal;
|
||||
<%
|
||||
end
|
||||
%>
|
||||
total = sum
|
||||
$('#total').text(total)
|
||||
break;
|
||||
}
|
||||
event.handled = true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
$('#open_cashier').on('click',function(){
|
||||
var cashier_terminal = $('#cashier_terminal').val();
|
||||
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';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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}])
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user