fixed conflict
This commit is contained in:
9
Capfile
9
Capfile
@@ -22,10 +22,15 @@ require "capistrano/bundler"
|
|||||||
require "capistrano/rails"
|
require "capistrano/rails"
|
||||||
require "capistrano/rails/assets"
|
require "capistrano/rails/assets"
|
||||||
require "capistrano/rails/migrations"
|
require "capistrano/rails/migrations"
|
||||||
# require "capistrano/passenger"
|
require "capistrano/scm/git"
|
||||||
|
install_plugin Capistrano::SCM::Git
|
||||||
|
|
||||||
|
require 'capistrano/puma'
|
||||||
|
install_plugin Capistrano::Puma, load_hooks: false # Default puma tasks
|
||||||
|
install_plugin Capistrano::Puma::Monit # if you need the monit tasks
|
||||||
|
install_plugin Capistrano::Puma::Jungle # if you need the jungle tasks
|
||||||
|
|
||||||
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
|
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
|
||||||
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
|
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
|
||||||
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
|
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
|
||||||
Dir.glob('lib/capistrano/**/*.rb').each { |r| import r }
|
Dir.glob('lib/capistrano/**/*.rb').each { |r| import r }
|
||||||
|
|
||||||
|
|||||||
6
Gemfile
6
Gemfile
@@ -1,6 +1,8 @@
|
|||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
#ruby '2.4.1'
|
#ruby '2.4.1'
|
||||||
ruby '2.5.7'
|
ruby '2.5.7'
|
||||||
|
|
||||||
git_source(:github) do |repo_name|
|
git_source(:github) do |repo_name|
|
||||||
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
||||||
"https://github.com/#{repo_name}.git"
|
"https://github.com/#{repo_name}.git"
|
||||||
@@ -45,7 +47,8 @@ gem 'mini_magick'
|
|||||||
gem 'jquery-fileupload-rails', '~> 0.4.7'
|
gem 'jquery-fileupload-rails', '~> 0.4.7'
|
||||||
|
|
||||||
#Report and Printing gems
|
#Report and Printing gems
|
||||||
gem 'cups'
|
#gem 'cups' #remove for cloud installation
|
||||||
|
gem 'cups', '~>0.0.7'
|
||||||
gem 'prawn'
|
gem 'prawn'
|
||||||
gem 'prawn-table'
|
gem 'prawn-table'
|
||||||
gem 'prawn-qrcode'
|
gem 'prawn-qrcode'
|
||||||
@@ -115,6 +118,7 @@ group :development do
|
|||||||
gem 'capistrano-bundler'
|
gem 'capistrano-bundler'
|
||||||
gem 'capistrano-rails'
|
gem 'capistrano-rails'
|
||||||
gem 'capistrano-rbenv', github: "capistrano/rbenv"
|
gem 'capistrano-rbenv', github: "capistrano/rbenv"
|
||||||
|
gem 'capistrano3-puma'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
|
|||||||
14
Gemfile.lock
14
Gemfile.lock
@@ -72,11 +72,15 @@ GEM
|
|||||||
capistrano-rails (1.4.0)
|
capistrano-rails (1.4.0)
|
||||||
capistrano (~> 3.1)
|
capistrano (~> 3.1)
|
||||||
capistrano-bundler (~> 1.1)
|
capistrano-bundler (~> 1.1)
|
||||||
|
capistrano3-puma (3.1.1)
|
||||||
|
capistrano (~> 3.7)
|
||||||
|
capistrano-bundler
|
||||||
|
puma (~> 3.4)
|
||||||
carrierwave (1.3.1)
|
carrierwave (1.3.1)
|
||||||
activemodel (>= 4.0.0)
|
activemodel (>= 4.0.0)
|
||||||
activesupport (>= 4.0.0)
|
activesupport (>= 4.0.0)
|
||||||
mime-types (>= 1.16)
|
mime-types (>= 1.16)
|
||||||
chartkick (3.2.1)
|
chartkick (3.2.2)
|
||||||
chronic (0.10.2)
|
chronic (0.10.2)
|
||||||
chunky_png (1.3.11)
|
chunky_png (1.3.11)
|
||||||
coffee-rails (4.2.2)
|
coffee-rails (4.2.2)
|
||||||
@@ -89,7 +93,7 @@ GEM
|
|||||||
concurrent-ruby (1.1.5)
|
concurrent-ruby (1.1.5)
|
||||||
connection_pool (2.2.2)
|
connection_pool (2.2.2)
|
||||||
crass (1.0.5)
|
crass (1.0.5)
|
||||||
cups (0.1.10)
|
cups (0.0.7)
|
||||||
database_cleaner (1.7.0)
|
database_cleaner (1.7.0)
|
||||||
diff-lcs (1.3)
|
diff-lcs (1.3)
|
||||||
erubi (1.9.0)
|
erubi (1.9.0)
|
||||||
@@ -265,7 +269,7 @@ GEM
|
|||||||
simple_form (5.0.1)
|
simple_form (5.0.1)
|
||||||
actionpack (>= 5.0)
|
actionpack (>= 5.0)
|
||||||
activemodel (>= 5.0)
|
activemodel (>= 5.0)
|
||||||
spreadsheet (1.2.4)
|
spreadsheet (1.2.5)
|
||||||
ruby-ole (>= 1.0)
|
ruby-ole (>= 1.0)
|
||||||
spring (2.1.0)
|
spring (2.1.0)
|
||||||
spring-watcher-listen (2.0.1)
|
spring-watcher-listen (2.0.1)
|
||||||
@@ -321,10 +325,11 @@ DEPENDENCIES
|
|||||||
capistrano-bundler
|
capistrano-bundler
|
||||||
capistrano-rails
|
capistrano-rails
|
||||||
capistrano-rbenv!
|
capistrano-rbenv!
|
||||||
|
capistrano3-puma
|
||||||
carrierwave (~> 1.0)
|
carrierwave (~> 1.0)
|
||||||
chartkick
|
chartkick
|
||||||
coffee-rails (~> 4.2)
|
coffee-rails (~> 4.2)
|
||||||
cups
|
cups (~> 0.0.7)
|
||||||
database_cleaner
|
database_cleaner
|
||||||
factory_girl_rails (~> 4.0)
|
factory_girl_rails (~> 4.0)
|
||||||
faker
|
faker
|
||||||
@@ -370,6 +375,7 @@ DEPENDENCIES
|
|||||||
whenever
|
whenever
|
||||||
|
|
||||||
RUBY VERSION
|
RUBY VERSION
|
||||||
|
|
||||||
ruby 2.4.1p111
|
ruby 2.4.1p111
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
class Api::ApiController < ActionController::API
|
class Api::ApiController < ActionController::API
|
||||||
# include TokenVerification
|
include TokenVerification
|
||||||
|
include ActionController::MimeResponds
|
||||||
|
|
||||||
# before_action :lookup_domain
|
# before_action :lookup_domain
|
||||||
helper_method :current_token, :current_login_employee, :get_cashier
|
helper_method :current_token, :current_login_employee, :get_cashier
|
||||||
@@ -23,25 +24,25 @@ class Api::ApiController < ActionController::API
|
|||||||
@employee = Employee.find_by_token_session(current_token)
|
@employee = Employee.find_by_token_session(current_token)
|
||||||
end
|
end
|
||||||
|
|
||||||
# def lookup_domain
|
# def lookup_domain
|
||||||
# if request.subdomain.present? && request.subdomain != "www"
|
# if request.subdomain.present? && request.subdomain != "www"
|
||||||
# from = request.subdomain.downcase + "." + request.domain.downcase
|
# from = request.subdomain.downcase + "." + request.domain.downcase
|
||||||
# @license = cache_license(ENV["SX_PROVISION_URL"], from) # request.subdomain.downcase
|
# @license = cache_license(ENV["SX_PROVISION_URL"], from) # request.subdomain.downcase
|
||||||
# if (!@license.nil?)
|
# if (!@license.nil?)
|
||||||
# logger.info "Location - " + @license.dbhost
|
# logger.info "Location - " + @license.dbhost
|
||||||
# ActiveRecord::Base.establish_connection(website_connection(@license))
|
# ActiveRecord::Base.establish_connection(website_connection(@license))
|
||||||
# # authenticate_session_token
|
# # authenticate_session_token
|
||||||
# # logger.info "Connecting to - " + @license.subdomain + " - "+ @license.dbhost + "@" + @license.dbschema
|
# # logger.info "Connecting to - " + @license.subdomain + " - "+ @license.dbhost + "@" + @license.dbschema
|
||||||
# else
|
# else
|
||||||
# # reconnect_default_db
|
# # reconnect_default_db
|
||||||
# logger.info 'License is nil'
|
# logger.info 'License is nil'
|
||||||
# # redirect_to root_url(:host => request.domain) + "store_error"
|
# # redirect_to root_url(:host => request.domain) + "store_error"
|
||||||
# render :json => [{ status: false, message: 'Invalid Access!'}]
|
# render :json => [{ status: false, message: 'Invalid Access!'}]
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# def website_connection(license)
|
# def website_connection(license)
|
||||||
# default_connection.dup.update(:host => license.dbhost, :database => license.dbschema.to_s.downcase,
|
# default_connection.dup.update(:host => license.dbhost, :database => license.dbschema.to_s.downcase,
|
||||||
# :username => license.dbusername, :password => license.dbpassword)
|
# :username => license.dbusername, :password => license.dbpassword)
|
||||||
# end
|
# end
|
||||||
@@ -55,8 +56,8 @@ class Api::ApiController < ActionController::API
|
|||||||
# @default_config ||= ActiveRecord::Base.connection.instance_variable_get("@config").dup
|
# @default_config ||= ActiveRecord::Base.connection.instance_variable_get("@config").dup
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# def cache_license(url, lookup)
|
# def cache_license(url, lookup)
|
||||||
# @license = License.new(url, lookup)
|
# @license = License.new(url, lookup)
|
||||||
|
|
||||||
# if (@license.detail_with_local_cache(lookup) == true)
|
# if (@license.detail_with_local_cache(lookup) == true)
|
||||||
# return @license
|
# return @license
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class Api::AuthenticateController < Api::ApiController
|
|||||||
@status = false
|
@status = false
|
||||||
@error_message = "This employee is not active!"
|
@error_message = "This employee is not active!"
|
||||||
# render json: JSON.generate({:status => false, :error_message => "This employee is not active!"})
|
# render json: JSON.generate({:status => false, :error_message => "This employee is not active!"})
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@status = false
|
@status = false
|
||||||
@error_message = "Bad Emp_ID or Password!"
|
@error_message = "Bad Emp_ID or Password!"
|
||||||
|
|||||||
90
app/controllers/api/loader_service/load_data_controller.rb
Normal file
90
app/controllers/api/loader_service/load_data_controller.rb
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
require "net/http"
|
||||||
|
class Api::LoaderService::LoadDataController < Api::ApiController
|
||||||
|
skip_before_action :authenticate
|
||||||
|
|
||||||
|
def get_sale_data_rage
|
||||||
|
load_time_start = params[:load_time]
|
||||||
|
load_time_end = params[:load_time_end]
|
||||||
|
unless load_time_start.nil? || load_time_end.nil?
|
||||||
|
@sale_data = Sale.get_load_sale_range(load_time_start.to_datetime,load_time_end.to_datetime)
|
||||||
|
if !@sale_data.empty?
|
||||||
|
@out = {general_status: true, data: @sale_data}
|
||||||
|
else
|
||||||
|
@out = {general_status: false, data: "Data is empty."}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
@out = {general_status: false, data: "load_time is missing."}
|
||||||
|
end
|
||||||
|
render :json => @out
|
||||||
|
end
|
||||||
|
|
||||||
|
# SFTP for BreadTalk Start
|
||||||
|
|
||||||
|
# Detail Sale
|
||||||
|
def get_detail_sale_data
|
||||||
|
data = params['data']
|
||||||
|
transaction_date = data[:transaction_date].to_s
|
||||||
|
detail_sale_data = SaleItem.get_detail_sale_data(transaction_date)
|
||||||
|
json = detail_sale_data.to_json
|
||||||
|
trans_count = JSON.parse(json).count
|
||||||
|
unless detail_sale_data.empty?
|
||||||
|
out = { :status => "success", :transaction_count => trans_count, :data => detail_sale_data }
|
||||||
|
else
|
||||||
|
out = { :status => "fail", :data => "Data is empty" }
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.json {render json: out }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Tender sale
|
||||||
|
def get_tender_sale_data
|
||||||
|
data = params['data']
|
||||||
|
transaction_date = data['transaction_date'].to_s
|
||||||
|
tender_sale_data = Sale.get_tender_sale_data(transaction_date)
|
||||||
|
json = tender_sale_data.to_json
|
||||||
|
trans_count = JSON.parse(json).count
|
||||||
|
unless tender_sale_data.empty?
|
||||||
|
out = { :status => "success", :transaction_count => trans_count, :data => tender_sale_data }
|
||||||
|
else
|
||||||
|
out = { :status => "fail", :data => "Data is empty" }
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.json { render json: out }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Daily_Sale summary
|
||||||
|
def get_daily_sale_data
|
||||||
|
data = params['data']
|
||||||
|
transaction_date = data['transaction_date'].to_s
|
||||||
|
daily_sale_data = Sale.get_daily_sale_data(transaction_date)
|
||||||
|
unless daily_sale_data.empty?
|
||||||
|
out = { :status => "success", :data => daily_sale_data}
|
||||||
|
else
|
||||||
|
out = { :status => "fail", :data => "Data is empty"}
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.json { render json: out }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Check Sale Data
|
||||||
|
def get_check_sale_data
|
||||||
|
data = params['data']
|
||||||
|
transaction_date = data['transaction_date'].to_s
|
||||||
|
check_sale_data = Sale.get_check_sale_data(transaction_date)
|
||||||
|
json = check_sale_data.to_json
|
||||||
|
trans_count = JSON.parse(json).count
|
||||||
|
unless check_sale_data.empty?
|
||||||
|
out = { :status => "success", :transaction_count => trans_count, :data => check_sale_data}
|
||||||
|
else
|
||||||
|
out = { :status => "fail", :data => "Data is empty"}
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.json { render json: out }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# SFTP for BreadTalk End
|
||||||
|
end
|
||||||
@@ -8,7 +8,7 @@ class Api::VoidController < Api::ApiController
|
|||||||
|
|
||||||
if sale.discount_type == "member_discount"
|
if sale.discount_type == "member_discount"
|
||||||
sale.update_attributes(total_discount: 0)
|
sale.update_attributes(total_discount: 0)
|
||||||
sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source)
|
sale.compute_by_sale_items(0, nil, order_source)
|
||||||
end
|
end
|
||||||
|
|
||||||
# update count for shift sale
|
# update count for shift sale
|
||||||
@@ -25,18 +25,17 @@ class Api::VoidController < Api::ApiController
|
|||||||
shift.save
|
shift.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
sale.rounding_adjustment = 0.0
|
sale.rounding_adjustment = 0.0
|
||||||
sale.payment_status = 'void'
|
sale.payment_status = 'void'
|
||||||
sale.sale_status = 'void'
|
sale.sale_status = 'void'
|
||||||
sale.save
|
sale.save
|
||||||
|
|
||||||
# remark = "Void Sale ID #{sale_id} | Receipt No #{sale.receipt_no} | Receipt No #{sale.receipt_no} | Table ->#{table.name}"
|
# remark = "Void Sale ID #{sale_id} | Receipt No #{sale.receipt_no} | Receipt No #{sale.receipt_no} | Table ->#{table.name}"
|
||||||
sale_audit = SaleAudit.record_audit_for_edit(sale_id,current_login_employee.name, current_login_employee.name,nil,"SALEVOID" )
|
sale_audit = SaleAudit.record_audit_for_edit(sale_id,current_login_employee.name, current_login_employee.name,nil,"SALEVOID" )
|
||||||
render json: JSON.generate({:status => true, :message => "Void successful."})
|
render json: JSON.generate({:status => true, :message => "Void successful."})
|
||||||
else
|
else
|
||||||
render json: JSON.generate({:status => false, :error_message => "There is no sale for '#{params[:sale_id]}'!"})
|
render json: JSON.generate({:status => false, :error_message => "There is no sale for '#{params[:sale_id]}'!"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ class Origami::AddordersController < BaseOrigamiController
|
|||||||
def getCloudDomain
|
def getCloudDomain
|
||||||
from = ""
|
from = ""
|
||||||
if ENV["SERVER_MODE"] == 'cloud'
|
if ENV["SERVER_MODE"] == 'cloud'
|
||||||
from = request.subdomain + "." + request.domain
|
from = request.subdomain.to_s + "." + request.domain.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
return from
|
return from
|
||||||
|
|||||||
@@ -48,44 +48,44 @@ class Origami::CustomersController < BaseOrigamiController
|
|||||||
def add_customer
|
def add_customer
|
||||||
@webview = false
|
@webview = false
|
||||||
if check_mobile
|
if check_mobile
|
||||||
@webview = true
|
@webview = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@sale_id = params[:sale_id]
|
@sale_id = params[:sale_id]
|
||||||
@cashier_type = params[:type]
|
@cashier_type = params[:type]
|
||||||
@page = params[:dir_page]
|
@page = params[:dir_page]
|
||||||
|
|
||||||
if(@sale_id[0,3] == "SAL")
|
if(@sale_id[0,3] == "SAL")
|
||||||
@booking = Booking.find_by_sale_id(@sale_id)
|
@booking = Booking.find_by_sale_id(@sale_id)
|
||||||
if @booking.dining_facility_id.to_i > 0
|
if @booking.dining_facility_id.to_i > 0
|
||||||
@dining_facility = DiningFacility.find(@booking.dining_facility_id)
|
@dining_facility = DiningFacility.find(@booking.dining_facility_id)
|
||||||
else
|
else
|
||||||
@dining_facility = nil
|
@dining_facility = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
@booking_order = BookingOrder.find_by_order_id(@sale_id)
|
@booking_order = BookingOrder.find_by_order_id(@sale_id)
|
||||||
@booking = Booking.find(@booking_order.booking_id)
|
@booking = Booking.find(@booking_order.booking_id)
|
||||||
if @booking.dining_facility_id.to_i > 0
|
if @booking.dining_facility_id.to_i > 0
|
||||||
@dining_facility = DiningFacility.find(@booking.dining_facility_id)
|
@dining_facility = DiningFacility.find(@booking.dining_facility_id)
|
||||||
else
|
else
|
||||||
@dining_facility = nil
|
@dining_facility = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
filter = params[:filter]
|
filter = params[:filter]
|
||||||
|
|
||||||
if filter.nil?
|
if filter.nil?
|
||||||
@crm_customers = Customer.order("customer_id") #.page(params[:page])
|
@crm_customers = Customer.order("customer_id") #.page(params[:page])
|
||||||
#@products = Product.order("name").page(params[:page]).per(5)
|
#@products = Product.order("name").page(params[:page]).per(5)
|
||||||
else
|
else
|
||||||
@crm_customers = Customer.search(filter)
|
@crm_customers = Customer.search(filter)
|
||||||
end
|
end
|
||||||
#@crm_customers = Customer.all
|
#@crm_customers = Customer.all
|
||||||
@crm_customers = Kaminari.paginate_array(@crm_customers).page(params[:page]).per(20)
|
@crm_customers = Kaminari.paginate_array(@crm_customers).page(params[:page]).per(20)
|
||||||
@crm_customer = Customer.new
|
@crm_customer = Customer.new
|
||||||
@count_customer = Customer.count_customer
|
@count_customer = Customer.count_customer
|
||||||
|
|
||||||
# @taxes = TaxProfile.where(:group_type => 'cashier')
|
# @taxes = TaxProfile.where(:group_type => 'cashier')
|
||||||
@taxes = TaxProfile.unscoped.select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name")
|
@taxes = TaxProfile.unscoped.select("id, (CONCAT(name,'(',(SELECT name FROM lookups WHERE lookup_type='tax_profiles' AND value=group_type),')')) as name")
|
||||||
.order("group_type ASC,order_by ASC")
|
.order("group_type ASC,order_by ASC")
|
||||||
@@ -100,7 +100,7 @@ class Origami::CustomersController < BaseOrigamiController
|
|||||||
lookup_customer = Lookup.collection_of('customer_settings')
|
lookup_customer = Lookup.collection_of('customer_settings')
|
||||||
if !lookup_customer.empty?
|
if !lookup_customer.empty?
|
||||||
lookup_customer.each do |create_setting|
|
lookup_customer.each do |create_setting|
|
||||||
if create_setting[0].downcase == "create"
|
if create_setting[0].downcase == "create"
|
||||||
if create_setting[1] == '0' && current_login_employee.role == 'cashier'
|
if create_setting[1] == '0' && current_login_employee.role == 'cashier'
|
||||||
@create_flag = false
|
@create_flag = false
|
||||||
end
|
end
|
||||||
@@ -154,13 +154,13 @@ class Origami::CustomersController < BaseOrigamiController
|
|||||||
if status == true
|
if status == true
|
||||||
render json: JSON.generate({:status => true})
|
render json: JSON.generate({:status => true})
|
||||||
if(id == "SAL")
|
if(id == "SAL")
|
||||||
sale.compute_by_sale_items(sale.sale_id, sale.sale_items, sale.total_discount, nil, order_source)
|
sale.compute_by_sale_items(sale.total_discount, nil, order_source)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
render json: JSON.generate({:status => false, :error_message => "Record not found"})
|
render json: JSON.generate({:status => false, :error_message => "Record not found"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def send_account
|
def send_account
|
||||||
amount = params[:amount]
|
amount = params[:amount]
|
||||||
account_no = params[:account_no]
|
account_no = params[:account_no]
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
@print_settings = PrintSetting.get_precision_delimiter()
|
@print_settings = PrintSetting.get_precision_delimiter()
|
||||||
@webview = false
|
@webview = false
|
||||||
if check_mobile
|
if check_mobile
|
||||||
@webview = true
|
@webview = true
|
||||||
end
|
end
|
||||||
|
|
||||||
sale_id = params[:id]
|
sale_id = params[:id]
|
||||||
@cashier_type = params[:type]
|
@cashier_type = params[:type]
|
||||||
if Sale.exists?(sale_id)
|
if Sale.exists?(sale_id)
|
||||||
@@ -32,7 +32,6 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
discount_items = JSON.parse(params[:discount_items])
|
discount_items = JSON.parse(params[:discount_items])
|
||||||
overall_discount = params[:overall_discount]
|
overall_discount = params[:overall_discount]
|
||||||
sub_total = params[:sub_total]
|
sub_total = params[:sub_total]
|
||||||
|
|
||||||
|
|
||||||
if Sale.exists?(sale_id)
|
if Sale.exists?(sale_id)
|
||||||
sale = Sale.find(sale_id)
|
sale = Sale.find(sale_id)
|
||||||
@@ -44,26 +43,29 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
table_id = nil
|
table_id = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# sale.total_discount = overall_discount.to_f
|
# sale.total_discount = overall_discount.to_f
|
||||||
# sale.total_amount = sub_total.to_f
|
# sale.total_amount = sub_total.to_f
|
||||||
# sale.grand_total = (sub_total.to_f - overall_discount.to_f) + sale.total_tax;
|
# sale.grand_total = (sub_total.to_f - overall_discount.to_f) + sale.total_tax;
|
||||||
# sale.save
|
# sale.save
|
||||||
if discount_items.length > 0
|
if discount_items.length > 0
|
||||||
|
|
||||||
#save sale item for discount
|
#save sale item for discount
|
||||||
discount_items.each do |di|
|
discount_items.each do |di|
|
||||||
origin_sale_item = SaleItem.find(di["id"])
|
origin_sale_item = SaleItem.find(di["id"])
|
||||||
|
|
||||||
sale_item = SaleItem.new
|
sale_item = SaleItem.new
|
||||||
|
|
||||||
if !origin_sale_item.nil?
|
# if !origin_sale_item.nil?
|
||||||
menu_category = MenuCategory.get_menu_category(origin_sale_item.product_code) #get menu category for menu items
|
# menu_category = MenuCategory.get_menu_category(origin_sale_item.product_code) #get menu category for menu items
|
||||||
if !menu_category.nil?
|
# if !menu_category.nil?
|
||||||
sale_item.menu_category_code = menu_category.code
|
# sale_item.menu_category_code = menu_category.code
|
||||||
sale_item.menu_category_name = menu_category.name
|
# sale_item.menu_category_name = menu_category.name
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
|
|
||||||
|
sale_item.menu_category_code = origin_sale_item.menu_category_code
|
||||||
|
sale_item.menu_category_name = origin_sale_item.menu_category_name
|
||||||
|
|
||||||
sale_item.sale_id = sale_id
|
sale_item.sale_id = sale_id
|
||||||
sale_item.product_code = origin_sale_item != nil ? origin_sale_item.product_code : sale_id
|
sale_item.product_code = origin_sale_item != nil ? origin_sale_item.product_code : sale_id
|
||||||
@@ -73,7 +75,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
sale_item.status = "Discount"
|
sale_item.status = "Discount"
|
||||||
|
|
||||||
sale_item.qty = -1
|
sale_item.qty = -1
|
||||||
sale_item.unit_price = di["price"].to_f * (-1)
|
sale_item.unit_price = di["price"].to_f * -1
|
||||||
sale_item.taxable_price = di["price"]
|
sale_item.taxable_price = di["price"]
|
||||||
sale_item.is_taxable = 1
|
sale_item.is_taxable = 1
|
||||||
sale_item.account_id = origin_sale_item.account_id
|
sale_item.account_id = origin_sale_item.account_id
|
||||||
@@ -83,11 +85,11 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
|
|
||||||
action_by = current_user.name
|
action_by = current_user.name
|
||||||
remark = "Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} "
|
remark = "Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} "
|
||||||
|
|
||||||
sale_audit = SaleAudit.record_audit_discount(sale_item.sale_id,sale.cashier_name, action_by,remark,"ITEMDISCOUNT" )
|
sale_audit = SaleAudit.record_audit_discount(sale_item.sale_id,sale.cashier_name, action_by,remark,"ITEMDISCOUNT" )
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Re-calc All Amount in Sale
|
# Re-calc All Amount in Sale
|
||||||
if overall_discount.to_f > 0
|
if overall_discount.to_f > 0
|
||||||
@@ -97,24 +99,24 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
else
|
else
|
||||||
remark = "Discount Overall Price [#{overall_discount}]| Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
remark = "Discount Overall Price [#{overall_discount}]| Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
||||||
end
|
end
|
||||||
|
|
||||||
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"OVERALLDISCOUNT" )
|
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"OVERALLDISCOUNT" )
|
||||||
end
|
end
|
||||||
sale.compute_by_sale_items(sale_id, sale.sale_items, overall_discount.to_f, nil,order_source)
|
sale.compute_by_sale_items(overall_discount.to_f, nil,order_source)
|
||||||
if !table.nil?
|
if !table.nil?
|
||||||
result = {:status=> "Success", :table_id => table_id, :table_type => table.type }
|
result = {:status=> "Success", :table_id => table_id, :table_type => table.type }
|
||||||
else
|
else
|
||||||
result = {:status=> "Success" }
|
result = {:status=> "Success" }
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if !table.nil?
|
if !table.nil?
|
||||||
result = {:status=> "Please, Check Again!", :table_id => table_id, :table_type => table.type }
|
result = {:status=> "Please, Check Again!", :table_id => table_id, :table_type => table.type }
|
||||||
else
|
else
|
||||||
result = {:status=> "Please, Check Again!" }
|
result = {:status=> "Please, Check Again!" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
render :json => result.to_json
|
render :json => result.to_json
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -131,45 +133,45 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
else
|
else
|
||||||
table_id = nil
|
table_id = nil
|
||||||
table = nil
|
table = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
if discount_items.length > 0
|
if discount_items.length > 0
|
||||||
#destroy sale item for discount
|
#destroy sale item for discount
|
||||||
discount_items.each do |di|
|
discount_items.each do |di|
|
||||||
sale_item = SaleItem.find(di["id"])
|
sale_item = SaleItem.find(di["id"])
|
||||||
sale.total_amount = (sale.total_amount + sale_item.price.abs)
|
sale.total_amount = (sale.total_amount + sale_item.price.abs)
|
||||||
|
|
||||||
action_by = current_user.name
|
action_by = current_user.name
|
||||||
if table.nil?
|
if table.nil?
|
||||||
remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- No Table "
|
remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- No Table "
|
||||||
else
|
else
|
||||||
remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
||||||
end
|
end
|
||||||
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEITEMDISCOUNT" )
|
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEITEMDISCOUNT" )
|
||||||
|
|
||||||
sale_item.destroy
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax;
|
sale_item.destroy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax;
|
||||||
# sale.save
|
# sale.save
|
||||||
# Re-calc All Amount in Sale
|
# Re-calc All Amount in Sale
|
||||||
sale.compute_by_sale_items(sale_id, sale.sale_items, sale.total_discount, nil, order_source)
|
sale.compute_by_sale_items(sale.total_discount, nil, order_source)
|
||||||
if table.nil?
|
if table.nil?
|
||||||
result = {:status=> "Success"}
|
result = {:status=> "Success"}
|
||||||
else
|
else
|
||||||
result = {:status=> "Success", :table_id => table_id, :table_type => table.type }
|
result = {:status=> "Success", :table_id => table_id, :table_type => table.type }
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
if table.nil?
|
if table.nil?
|
||||||
result = {:status=> "Please, Check Again!"}
|
result = {:status=> "Please, Check Again!"}
|
||||||
else
|
else
|
||||||
result = {:status=> "Please, Check Again!", :table_id => table_id, :table_type => table.type }
|
result = {:status=> "Please, Check Again!", :table_id => table_id, :table_type => table.type }
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
render :json => result.to_json
|
render :json => result.to_json
|
||||||
end
|
end
|
||||||
@@ -180,29 +182,29 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
order_source = params[:type]
|
order_source = params[:type]
|
||||||
|
|
||||||
if Sale.exists?(sale_id)
|
if Sale.exists?(sale_id)
|
||||||
sale = Sale.find(sale_id)
|
sale = Sale.find(sale_id)
|
||||||
|
|
||||||
if sale.bookings[0].dining_facility_id.to_i > 0
|
if sale.bookings[0].dining_facility_id.to_i > 0
|
||||||
table_id = sale.bookings[0].dining_facility_id
|
table_id = sale.bookings[0].dining_facility_id
|
||||||
table = DiningFacility.find(table_id)
|
table = DiningFacility.find(table_id)
|
||||||
table_type = table.type
|
table_type = table.type
|
||||||
else
|
else
|
||||||
table_id = nil
|
table_id = nil
|
||||||
table = nil
|
table = nil
|
||||||
table_type = nil
|
table_type = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
discount_items = []
|
discount_items = []
|
||||||
#destroy all discount sale item
|
#destroy all discount sale item
|
||||||
sale.sale_items.each do |si|
|
sale.sale_items.each do |si|
|
||||||
if si.status == "Discount" && si.price < 0
|
if si.status == "Discount" && si.price < 0
|
||||||
sale.total_amount = (sale.total_amount + si.price.abs)
|
sale.total_amount = (sale.total_amount + si.price.abs)
|
||||||
discount_items.push(si)
|
discount_items.push(si)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# sale.total_discount = 0
|
# sale.total_discount = 0
|
||||||
# sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax;
|
# sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax;
|
||||||
# sale.save
|
# sale.save
|
||||||
|
|
||||||
#destroy in sale.sale_items
|
#destroy in sale.sale_items
|
||||||
@@ -215,23 +217,23 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
remark = "Remove Discount Sale Id [#{sale.sale_id}]| Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
remark = "Remove Discount Sale Id [#{sale.sale_id}]| Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
||||||
end
|
end
|
||||||
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEALLDISCOUNT" )
|
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEALLDISCOUNT" )
|
||||||
|
|
||||||
# Re-calc All Amount in Sale
|
# Re-calc All Amount in Sale
|
||||||
sale.compute_by_sale_items(sale_id, sale.sale_items, 0, nil, order_source)
|
sale.compute_by_sale_items(0, nil, order_source)
|
||||||
if table.nil?
|
if table.nil?
|
||||||
result = {:status=> "Success"}
|
result = {:status=> "Success"}
|
||||||
else
|
else
|
||||||
result = {:status=> "Success", :table_id => table_id, :dining => table.name, :table_type => table_type }
|
result = {:status=> "Success", :table_id => table_id, :dining => table.name, :table_type => table_type }
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
if table.nil?
|
if table.nil?
|
||||||
result = {:status=> "Please, Check Again!"}
|
result = {:status=> "Please, Check Again!"}
|
||||||
else
|
else
|
||||||
result = {:status=> "Please, Check Again!", :table_id => table_id, :dining => table.name, :table_type => table_type }
|
result = {:status=> "Please, Check Again!", :table_id => table_id, :dining => table.name, :table_type => table_type }
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
render :json => result.to_json
|
render :json => result.to_json
|
||||||
end
|
end
|
||||||
@@ -251,7 +253,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
end
|
end
|
||||||
# Check for Card Payment
|
# Check for Card Payment
|
||||||
is_card_payment = SalePayment.get_sale_payments_by_card(sale.sale_payments)
|
is_card_payment = SalePayment.get_sale_payments_by_card(sale.sale_payments)
|
||||||
|
|
||||||
# if is_card != "true"
|
# if is_card != "true"
|
||||||
account_types = Account.where("discount=?",true)
|
account_types = Account.where("discount=?",true)
|
||||||
table_id = sale.bookings[0].dining_facility_id
|
table_id = sale.bookings[0].dining_facility_id
|
||||||
@@ -267,9 +269,9 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
str={type:pc[:name],amount:pc[:price]}
|
str={type:pc[:name],amount:pc[:price]}
|
||||||
acc_prices.push(str)
|
acc_prices.push(str)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
generic_customer_id = sale.customer.membership_id
|
generic_customer_id = sale.customer.membership_id
|
||||||
receipt_no = sale.receipt_no
|
receipt_no = sale.receipt_no
|
||||||
membership = MembershipSetting.find_by_membership_type("paypar_url")
|
membership = MembershipSetting.find_by_membership_type("paypar_url")
|
||||||
memberaction = MembershipAction.find_by_membership_type("member_discount")
|
memberaction = MembershipAction.find_by_membership_type("member_discount")
|
||||||
@@ -282,7 +284,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
# Check for items for Paypar Cloud
|
# Check for items for Paypar Cloud
|
||||||
if acc_prices.length > 0
|
if acc_prices.length > 0
|
||||||
begin
|
begin
|
||||||
response = HTTParty.post(url,
|
response = HTTParty.post(url,
|
||||||
:body => { account_no: account_no,
|
:body => { account_no: account_no,
|
||||||
generic_customer_id:generic_customer_id ,
|
generic_customer_id:generic_customer_id ,
|
||||||
campaign_type_id: campaign_type_id,
|
campaign_type_id: campaign_type_id,
|
||||||
@@ -307,7 +309,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
rescue SocketError
|
rescue SocketError
|
||||||
response = {"status": false, "message": "Can't open membership server " }
|
response = {"status": false, "message": "Can't open membership server " }
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
response = {"status": false, "message": "You have no selected discount item" }
|
response = {"status": false, "message": "You have no selected discount item" }
|
||||||
end
|
end
|
||||||
Rails.logger.debug "-------------- Member Discount Osaka ---------"
|
Rails.logger.debug "-------------- Member Discount Osaka ---------"
|
||||||
@@ -318,14 +320,14 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
if response["discount_bonus_earned"]
|
if response["discount_bonus_earned"]
|
||||||
discount_amount = discount_amount + response["discount_bonus_earned"]
|
discount_amount = discount_amount + response["discount_bonus_earned"]
|
||||||
end
|
end
|
||||||
sale.compute_by_sale_items(sale_id, sale.sale_items, discount_amount, 'member_discount', order_source, tax_type)
|
sale.compute_by_sale_items(discount_amount, 'member_discount', order_source, tax_type)
|
||||||
result = {:status=> "Success",:title=>"Member Discount", :table_id => table_id,:table_type => table_type }
|
result = {:status=> "Success",:title=>"Member Discount", :table_id => table_id,:table_type => table_type }
|
||||||
elsif response["status"] == "500"
|
elsif response["status"] == "500"
|
||||||
result = {:status=> response["error"],:title=>"Alert", :table_id => table_id,:table_type => table_type }
|
result = {:status=> response["error"],:title=>"Alert", :table_id => table_id,:table_type => table_type }
|
||||||
else
|
else
|
||||||
result = {:status=> response["message"],:title=>"Alert", :table_id => table_id,:table_type => table_type }
|
result = {:status=> response["message"],:title=>"Alert", :table_id => table_id,:table_type => table_type }
|
||||||
end
|
end
|
||||||
|
|
||||||
render :json => result.to_json
|
render :json => result.to_json
|
||||||
|
|
||||||
# end #end Is Card Payment
|
# end #end Is Card Payment
|
||||||
@@ -376,5 +378,5 @@ class Origami::DiscountsController < BaseOrigamiController
|
|||||||
|
|
||||||
# redirect_to origami_path(sale_id)
|
# redirect_to origami_path(sale_id)
|
||||||
# end
|
# end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ class Origami::OtherChargesController < BaseOrigamiController
|
|||||||
def index
|
def index
|
||||||
@webview = false
|
@webview = false
|
||||||
if check_mobile
|
if check_mobile
|
||||||
@webview = true
|
@webview = true
|
||||||
end
|
end
|
||||||
|
|
||||||
sale_id = params[:sale_id]
|
sale_id = params[:sale_id]
|
||||||
@cashier_type = params[:type]
|
@cashier_type = params[:type]
|
||||||
if Sale.exists?(sale_id)
|
if Sale.exists?(sale_id)
|
||||||
@@ -15,11 +15,11 @@ class Origami::OtherChargesController < BaseOrigamiController
|
|||||||
@table = DiningFacility.find(@sale_data.bookings[0].dining_facility_id)
|
@table = DiningFacility.find(@sale_data.bookings[0].dining_facility_id)
|
||||||
else
|
else
|
||||||
@table = nil
|
@table = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
sale_id = params[:sale_id]
|
sale_id = params[:sale_id]
|
||||||
other_charges_items = JSON.parse(params[:other_charges_items])
|
other_charges_items = JSON.parse(params[:other_charges_items])
|
||||||
sub_total = params[:sub_total]
|
sub_total = params[:sub_total]
|
||||||
@@ -34,11 +34,11 @@ class Origami::OtherChargesController < BaseOrigamiController
|
|||||||
table_id = nil
|
table_id = nil
|
||||||
table = nil
|
table = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# sale.total_amount = sub_total.to_f
|
# sale.total_amount = sub_total.to_f
|
||||||
# sale.grand_total = sub_total.to_f + sale.total_tax;
|
# sale.grand_total = sub_total.to_f + sale.total_tax;
|
||||||
# sale.save
|
# sale.save
|
||||||
if other_charges_items.length > 0
|
if other_charges_items.length > 0
|
||||||
#save sale item for discount
|
#save sale item for discount
|
||||||
other_charges_items.each do |di|
|
other_charges_items.each do |di|
|
||||||
@@ -68,18 +68,18 @@ class Origami::OtherChargesController < BaseOrigamiController
|
|||||||
else
|
else
|
||||||
remark = "Add Other Charges - Receipt No #{sale.receipt_no} | Sale ID #{sale.sale_id} |Charges ->#{di["price"]} For ->#{di["name"]}- Table ->#{table.name}"
|
remark = "Add Other Charges - Receipt No #{sale.receipt_no} | Sale ID #{sale.sale_id} |Charges ->#{di["price"]} For ->#{di["name"]}- Table ->#{table.name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
sale_audit = SaleAudit.record_audit_for_edit(sale.sale_id,sale.cashier_name, action_by,remark,"ADDOTHERCHARGES" )
|
sale_audit = SaleAudit.record_audit_for_edit(sale.sale_id,sale.cashier_name, action_by,remark,"ADDOTHERCHARGES" )
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Re-calc All Amount in Sale
|
# Re-calc All Amount in Sale
|
||||||
sale.compute_by_sale_items(sale_id, sale.sale_items, sale.total_discount, nil, cashier_type)
|
sale.compute_by_sale_items(sale.total_discount, nil, cashier_type)
|
||||||
end
|
end
|
||||||
if !table.nil?
|
if !table.nil?
|
||||||
dining = {:table_id => table_id, :table_type => table.type }
|
dining = {:table_id => table_id, :table_type => table.type }
|
||||||
render :json => dining.to_json
|
render :json => dining.to_json
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -64,15 +64,9 @@ class Origami::PaymentsController < BaseOrigamiController
|
|||||||
customer = Customer.find(sale_data.customer_id)
|
customer = Customer.find(sale_data.customer_id)
|
||||||
# rounding adjustment
|
# rounding adjustment
|
||||||
if shop_detail.is_rounding_adj
|
if shop_detail.is_rounding_adj
|
||||||
a = sale_data.grand_total % 25 # Modulus
|
new_total = Sale.get_rounding_adjustment(sale_data.grand_total)
|
||||||
b = sale_data.grand_total / 25 # Division
|
rounding_adj = new_total - sale_data.grand_total
|
||||||
#not calculate rounding if modulus is 0 and division is even
|
sale_data.update_attributes(grand_total: new_total,old_grand_total: sale_data.grand_total,rounding_adjustment:rounding_adj) if rounding_adj > 0
|
||||||
#calculate rounding if modulus is zero or not zero and division are not even
|
|
||||||
if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
|
||||||
new_total = Sale.get_rounding_adjustment(sale_data.grand_total)
|
|
||||||
rounding_adj = new_total-sale_data.grand_total
|
|
||||||
sale_data.update_attributes(grand_total: new_total,old_grand_total: sale_data.grand_total,rounding_adjustment:rounding_adj)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
#end rounding adjustment
|
#end rounding adjustment
|
||||||
#record for sale audit
|
#record for sale audit
|
||||||
@@ -151,15 +145,9 @@ class Origami::PaymentsController < BaseOrigamiController
|
|||||||
# rounding adjustment
|
# rounding adjustment
|
||||||
if !path.include? ("credit_payment")
|
if !path.include? ("credit_payment")
|
||||||
if shop_detail.is_rounding_adj
|
if shop_detail.is_rounding_adj
|
||||||
a = saleObj.grand_total % 25 # Modulus
|
new_total = Sale.get_rounding_adjustment(saleObj.grand_total)
|
||||||
b = saleObj.grand_total / 25 # Division
|
rounding_adj = new_total - saleObj.grand_total
|
||||||
#not calculate rounding if modulus is 0 and division is even
|
saleObj.update_attributes(grand_total: new_total,old_grand_total: saleObj.grand_total,rounding_adjustment:rounding_adj) if rounding_adj > 0
|
||||||
#calculate rounding if modulus is zero or not zero and division are not even
|
|
||||||
if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
|
||||||
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
|
end
|
||||||
end
|
end
|
||||||
#end rounding adjustment
|
#end rounding adjustment
|
||||||
@@ -655,7 +643,7 @@ class Origami::PaymentsController < BaseOrigamiController
|
|||||||
|
|
||||||
if saleObj.discount_type == "member_discount"
|
if saleObj.discount_type == "member_discount"
|
||||||
saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0)
|
saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0)
|
||||||
saleObj.compute_by_sale_items(sale_id, saleObj.sale_items,0,order_source)
|
saleObj.compute_by_sale_items(0, nil, order_source)
|
||||||
end
|
end
|
||||||
|
|
||||||
saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0)
|
saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0)
|
||||||
@@ -830,7 +818,7 @@ class Origami::PaymentsController < BaseOrigamiController
|
|||||||
order_source = params[:cashier_type]
|
order_source = params[:cashier_type]
|
||||||
tax_type = params[:tax_type]
|
tax_type = params[:tax_type]
|
||||||
sale = Sale.find(sale_id)
|
sale = Sale.find(sale_id)
|
||||||
sale.compute_by_sale_items(sale.sale_id, sale.sale_items, sale.total_discount,nil,order_source,tax_type)
|
sale.compute_by_sale_items(sale.total_discount, nil, order_source, tax_type)
|
||||||
|
|
||||||
render json: JSON.generate({:status => true})
|
render json: JSON.generate({:status => true})
|
||||||
end
|
end
|
||||||
@@ -839,7 +827,7 @@ class Origami::PaymentsController < BaseOrigamiController
|
|||||||
def getCloudDomain
|
def getCloudDomain
|
||||||
from = ""
|
from = ""
|
||||||
if ENV["SERVER_MODE"] == 'cloud'
|
if ENV["SERVER_MODE"] == 'cloud'
|
||||||
from = request.subdomain + "." + request.domain
|
from = request.subdomain.to_s + "." + request.domain.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
return from
|
return from
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class Origami::PendingOrderController < BaseOrigamiController
|
|||||||
else
|
else
|
||||||
redirect_to "/origami/#{params[:type]}" and return
|
redirect_to "/origami/#{params[:type]}" and return
|
||||||
end
|
end
|
||||||
elsif (id.start_with?("BKI")|| id.start_with?("CBKI"))
|
elsif (id.start_with?("BKI") || id.start_with?("CBKI"))
|
||||||
@bookings = Booking.find(id)
|
@bookings = Booking.find(id)
|
||||||
@order = @bookings.orders.where(status: "new").first
|
@order = @bookings.orders.where(status: "new").first
|
||||||
@order_items = @bookings.order_items
|
@order_items = @bookings.order_items
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
remark = "Void Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}"
|
remark = "Void Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}"
|
||||||
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMVOID" )
|
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMVOID" )
|
||||||
|
|
||||||
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source)
|
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
|
||||||
ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
|
ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
saleitemObj.status = 'foc'
|
saleitemObj.status = 'foc'
|
||||||
saleitemObj.remark = remark
|
saleitemObj.remark = remark
|
||||||
saleitemObj.save
|
saleitemObj.save
|
||||||
@newsaleitem = SaleItem.new
|
|
||||||
@newsaleitem = saleitemObj.dup
|
@newsaleitem = saleitemObj.dup
|
||||||
@newsaleitem.qty = saleitemObj.qty * -1
|
@newsaleitem.qty = saleitemObj.qty * -1
|
||||||
@newsaleitem.unit_price = saleitemObj.unit_price * 1
|
@newsaleitem.unit_price = saleitemObj.unit_price * 1
|
||||||
@@ -95,7 +95,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
remark = "FOC Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}Receipt No #{saleObj.receipt_no}"
|
remark = "FOC Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}Receipt No #{saleObj.receipt_no}"
|
||||||
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMFOC" )
|
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMFOC" )
|
||||||
|
|
||||||
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source)
|
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
|
||||||
ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
|
ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -143,17 +143,17 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMEDIT" )
|
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMEDIT" )
|
||||||
# saleitemObj.remark = 'edit'
|
# saleitemObj.remark = 'edit'
|
||||||
|
|
||||||
unless saleitemObj.product_name.include? 'updated'
|
unless saleitemObj.product_name.include? 'UPDATED'
|
||||||
saleitemObj.product_name = saleitemObj.product_name + ' (UPDATED)'
|
saleitemObj.product_name = saleitemObj.product_name + ' (UPDATED)'
|
||||||
end
|
end
|
||||||
|
|
||||||
saleitemObj.save
|
saleitemObj.save
|
||||||
|
|
||||||
# re-calc tax
|
# re-calc tax
|
||||||
saleObj = Sale.find(saleitemObj.sale_id)
|
# saleObj = Sale.find(saleitemObj.sale_id)
|
||||||
|
|
||||||
order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id
|
# order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id
|
||||||
order = Order.find(order_id)
|
# order = Order.find(order_id)
|
||||||
|
|
||||||
# order.order_items.each do |o|
|
# order.order_items.each do |o|
|
||||||
# if saleitemObj.product_code == o.item_code
|
# if saleitemObj.product_code == o.item_code
|
||||||
@@ -163,7 +163,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
|
|
||||||
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source)
|
sale.compute_by_sale_items(saleObj.total_discount, nil, order_source)
|
||||||
|
|
||||||
ProductCommission.edit_product_commission(saleitemObj)
|
ProductCommission.edit_product_commission(saleitemObj)
|
||||||
end
|
end
|
||||||
@@ -195,8 +195,8 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
end
|
end
|
||||||
remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}"
|
remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}"
|
||||||
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"ITEMCANCELVOID" )
|
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"ITEMCANCELVOID" )
|
||||||
|
|
||||||
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount, order_source)
|
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
|
||||||
ProductCommission.remove_product_commission(saleitemObj)
|
ProductCommission.remove_product_commission(saleitemObj)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -214,9 +214,9 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
item.save
|
item.save
|
||||||
ProductCommission.remove_product_commission(item)
|
ProductCommission.remove_product_commission(item)
|
||||||
end
|
end
|
||||||
|
saleObj.sale_items.reset
|
||||||
# re-calc tax
|
# re-calc tax
|
||||||
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source)
|
saleObj.compute_by_sale_items(saleObj.total_discount,nil, order_source)
|
||||||
end
|
end
|
||||||
|
|
||||||
def apply_void
|
def apply_void
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class Origami::VoidController < BaseOrigamiController
|
|||||||
sale = Sale.find_by_sale_id(sale_id)
|
sale = Sale.find_by_sale_id(sale_id)
|
||||||
if sale.discount_type == "member_discount"
|
if sale.discount_type == "member_discount"
|
||||||
sale.update_attributes(total_discount: 0)
|
sale.update_attributes(total_discount: 0)
|
||||||
sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source)
|
sale.compute_by_sale_items(0, nil, order_source)
|
||||||
end
|
end
|
||||||
|
|
||||||
# update count for shift sale
|
# update count for shift sale
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ class Origami::WasteSpoileController < BaseOrigamiController
|
|||||||
sale.sale_status = remark
|
sale.sale_status = remark
|
||||||
sale.save
|
sale.save
|
||||||
|
|
||||||
# sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source)
|
|
||||||
# add to sale item with foc
|
# add to sale item with foc
|
||||||
# sale_items = SaleItem.where("sale_id='#{ sale_id }' and status is null")
|
# sale_items = SaleItem.where("sale_id='#{ sale_id }' and status is null")
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ class Transactions::SalesController < ApplicationController
|
|||||||
# GET /transactions/sales
|
# GET /transactions/sales
|
||||||
# GET /transactions/sales.json
|
# GET /transactions/sales.json
|
||||||
def index
|
def index
|
||||||
|
|
||||||
receipt_no = params[:receipt_no]
|
receipt_no = params[:receipt_no]
|
||||||
# from = params[:from]
|
# from = params[:from]
|
||||||
# to = params[:to]
|
# to = params[:to]
|
||||||
@@ -19,18 +19,18 @@ class Transactions::SalesController < ApplicationController
|
|||||||
if receipt_no.nil? && from.nil? && to.nil?
|
if receipt_no.nil? && from.nil? && to.nil?
|
||||||
if @shift.blank?
|
if @shift.blank?
|
||||||
@sales = Sale.where("NOT sale_status='new'").order("sale_id desc")
|
@sales = Sale.where("NOT sale_status='new'").order("sale_id desc")
|
||||||
else
|
else
|
||||||
@sales = Sale.where("NOT sale_status='new' and shift_sale_id ='#{@shift.id}'").order("sale_id desc")
|
@sales = Sale.where("NOT sale_status='new' and shift_sale_id ='#{@shift.id}'").order("sale_id desc")
|
||||||
end
|
end
|
||||||
@sales = Kaminari.paginate_array(@sales).page(params[:page]).per(20)
|
@sales = Kaminari.paginate_array(@sales).page(params[:page]).per(20)
|
||||||
else
|
else
|
||||||
sale = Sale.search(receipt_no,from,to,@shift)
|
sale = Sale.search(receipt_no,from,to,@shift)
|
||||||
if sale.count > 0
|
if sale.count > 0
|
||||||
@sales = sale
|
@sales = sale
|
||||||
@sales = Kaminari.paginate_array(@sales).page(params[:page]).per(20)
|
@sales = Kaminari.paginate_array(@sales).page(params[:page]).per(20)
|
||||||
else
|
else
|
||||||
@sales = 0
|
@sales = 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@receipt_no = receipt_no
|
@receipt_no = receipt_no
|
||||||
@from = from
|
@from = from
|
||||||
@@ -41,20 +41,20 @@ class Transactions::SalesController < ApplicationController
|
|||||||
@shift_to = @shift.shift_closed_at.nil? ? '-' : @shift.shift_closed_at.utc.getlocal.strftime("%e %b %I:%M%p")
|
@shift_to = @shift.shift_closed_at.nil? ? '-' : @shift.shift_closed_at.utc.getlocal.strftime("%e %b %I:%M%p")
|
||||||
@shift_data = @shift
|
@shift_data = @shift
|
||||||
end
|
end
|
||||||
|
|
||||||
# if receipt_no.nil? && search_date.nil?
|
# if receipt_no.nil? && search_date.nil?
|
||||||
# @sales = Sale.where("NOT sale_status = 'void' " ).order("sale_id desc").limit(500)
|
# @sales = Sale.where("NOT sale_status = 'void' " ).order("sale_id desc").limit(500)
|
||||||
# @sales = Kaminari.paginate_array(@sales).page(params[:page]).per(50)
|
# @sales = Kaminari.paginate_array(@sales).page(params[:page]).per(50)
|
||||||
# else
|
# else
|
||||||
# if !search_date.blank? && receipt_no.blank?
|
# if !search_date.blank? && receipt_no.blank?
|
||||||
# sale = Sale.where("DATE_FORMAT(receipt_date,'%d-%m-%Y') = ? and NOT sale_status = 'void' ", search_date).order("sale_id desc").limit(500).page(params[:page])
|
# sale = Sale.where("DATE_FORMAT(receipt_date,'%d-%m-%Y') = ? and NOT sale_status = 'void' ", search_date).order("sale_id desc").limit(500).page(params[:page])
|
||||||
# elsif !search_date.blank? && !receipt_no.blank?
|
# elsif !search_date.blank? && !receipt_no.blank?
|
||||||
# sale = Sale.where("receipt_no LIKE ? or DATE_FORMAT(receipt_date,'%d-%m-%Y') = ? and NOT sale_status = 'void' ", "%#{receipt_no}%", search_date).order("sale_id desc").limit(500).page(params[:page])
|
# sale = Sale.where("receipt_no LIKE ? or DATE_FORMAT(receipt_date,'%d-%m-%Y') = ? and NOT sale_status = 'void' ", "%#{receipt_no}%", search_date).order("sale_id desc").limit(500).page(params[:page])
|
||||||
# else
|
# else
|
||||||
# sale = Sale.where("receipt_no LIKE ? and NOT sale_status = 'void' ", receipt_no).order("sale_id desc").limit(500).page(params[:page])
|
# sale = Sale.where("receipt_no LIKE ? and NOT sale_status = 'void' ", receipt_no).order("sale_id desc").limit(500).page(params[:page])
|
||||||
# end
|
# end
|
||||||
# if sale.count > 0
|
# if sale.count > 0
|
||||||
# @sales = sale
|
# @sales = sale
|
||||||
# @sales = Kaminari.paginate_array(@sales).page(params[:page]).per(50)
|
# @sales = Kaminari.paginate_array(@sales).page(params[:page]).per(50)
|
||||||
# else
|
# else
|
||||||
# @sales = 0
|
# @sales = 0
|
||||||
@@ -182,7 +182,7 @@ class Transactions::SalesController < ApplicationController
|
|||||||
period_type = params[:period_type]
|
period_type = params[:period_type]
|
||||||
period = params[:period]
|
period = params[:period]
|
||||||
from = params[:from]
|
from = params[:from]
|
||||||
to = params[:to]
|
to = params[:to]
|
||||||
day_ref = Time.now.utc.getlocal
|
day_ref = Time.now.utc.getlocal
|
||||||
|
|
||||||
if from.present? && to.present?
|
if from.present? && to.present?
|
||||||
@@ -191,8 +191,8 @@ class Transactions::SalesController < ApplicationController
|
|||||||
f_time = Time.mktime(f_date.year,f_date.month,f_date.day,f_date.hour,f_date.min,f_date.sec)
|
f_time = Time.mktime(f_date.year,f_date.month,f_date.day,f_date.hour,f_date.min,f_date.sec)
|
||||||
t_time = Time.mktime(t_date.year,t_date.month,t_date.day,t_date.hour,t_date.min,t_date.sec)
|
t_time = Time.mktime(t_date.year,t_date.month,t_date.day,t_date.hour,t_date.min,t_date.sec)
|
||||||
from = f_time.beginning_of_day.utc.getlocal
|
from = f_time.beginning_of_day.utc.getlocal
|
||||||
to = t_time.end_of_day.utc.getlocal
|
to = t_time.end_of_day.utc.getlocal
|
||||||
else
|
else
|
||||||
case period.to_i
|
case period.to_i
|
||||||
when PERIOD["today"]
|
when PERIOD["today"]
|
||||||
from = day_ref.beginning_of_day.utc
|
from = day_ref.beginning_of_day.utc
|
||||||
@@ -226,10 +226,10 @@ class Transactions::SalesController < ApplicationController
|
|||||||
when PERIOD["last_year"]
|
when PERIOD["last_year"]
|
||||||
from = (day_ref - 1.year).beginning_of_year.utc
|
from = (day_ref - 1.year).beginning_of_year.utc
|
||||||
to = (day_ref - 1.year).end_of_year.utc
|
to = (day_ref - 1.year).end_of_year.utc
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return from, to
|
return from, to
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_user
|
def check_user
|
||||||
@@ -248,7 +248,7 @@ class Transactions::SalesController < ApplicationController
|
|||||||
|
|
||||||
if sale.discount_type == "member_discount"
|
if sale.discount_type == "member_discount"
|
||||||
sale.update_attributes(total_discount: 0)
|
sale.update_attributes(total_discount: 0)
|
||||||
sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source)
|
sale.compute_by_sale_items(0, nil, order_source)
|
||||||
end
|
end
|
||||||
|
|
||||||
# update count for shift sale
|
# update count for shift sale
|
||||||
@@ -265,7 +265,7 @@ class Transactions::SalesController < ApplicationController
|
|||||||
shift.save
|
shift.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
sale.rounding_adjustment = 0.0
|
sale.rounding_adjustment = 0.0
|
||||||
sale.payment_status = 'void'
|
sale.payment_status = 'void'
|
||||||
sale.sale_status = 'void'
|
sale.sale_status = 'void'
|
||||||
@@ -308,16 +308,16 @@ class Transactions::SalesController < ApplicationController
|
|||||||
table = nil
|
table = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
# FOr Sale Audit
|
# FOr Sale Audit
|
||||||
action_by = current_user.name
|
action_by = current_user.name
|
||||||
if access_code != "null" && current_user.role == "cashier"
|
if access_code != "null" && current_user.role == "cashier"
|
||||||
action_by = Employee.find_by_emp_id(access_code).name
|
action_by = Employee.find_by_emp_id(access_code).name
|
||||||
end
|
end
|
||||||
|
|
||||||
# remark = "Void Sale ID #{sale_id} | Receipt No #{sale.receipt_no} | Receipt No #{sale.receipt_no} | Table ->#{table.name}"
|
# remark = "Void Sale ID #{sale_id} | Receipt No #{sale.receipt_no} | Receipt No #{sale.receipt_no} | Table ->#{table.name}"
|
||||||
sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, action_by,remark,"SALEVOID" )
|
sale_audit = SaleAudit.record_audit_for_edit(sale_id,sale.cashier_id, action_by,remark,"SALEVOID" )
|
||||||
|
|
||||||
# For Print
|
# For Print
|
||||||
|
|
||||||
member_info = nil
|
member_info = nil
|
||||||
rebate_amount = nil
|
rebate_amount = nil
|
||||||
@@ -325,7 +325,7 @@ class Transactions::SalesController < ApplicationController
|
|||||||
|
|
||||||
# For Cashier by Zone
|
# For Cashier by Zone
|
||||||
bookings = Booking.where("sale_id='#{sale_id}'")
|
bookings = Booking.where("sale_id='#{sale_id}'")
|
||||||
if bookings.count > 1
|
if bookings.count > 1
|
||||||
# for Multiple Booking
|
# for Multiple Booking
|
||||||
if bookings[0].dining_facility_id.to_i>0
|
if bookings[0].dining_facility_id.to_i>0
|
||||||
table = DiningFacility.find(bookings[0].dining_facility_id)
|
table = DiningFacility.find(bookings[0].dining_facility_id)
|
||||||
@@ -339,12 +339,12 @@ class Transactions::SalesController < ApplicationController
|
|||||||
shift = ShiftSale.find(sale.shift_sale_id)
|
shift = ShiftSale.find(sale.shift_sale_id)
|
||||||
cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
|
cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
# if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
|
# if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
|
||||||
unique_code = "ReceiptBillPdf"
|
unique_code = "ReceiptBillPdf"
|
||||||
customer= Customer.find(sale.customer_id)
|
customer= Customer.find(sale.customer_id)
|
||||||
|
|
||||||
#shop detail
|
#shop detail
|
||||||
shop_details = Shop.find_by_id(1)
|
shop_details = Shop.find_by_id(1)
|
||||||
# get member information
|
# get member information
|
||||||
@@ -363,31 +363,31 @@ class Transactions::SalesController < ApplicationController
|
|||||||
discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(sale.sale_items)
|
discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(sale.sale_items)
|
||||||
|
|
||||||
other_amount = SaleItem.calculate_other_charges(sale.sale_items) #other charges
|
other_amount = SaleItem.calculate_other_charges(sale.sale_items) #other charges
|
||||||
printer = Printer::ReceiptPrinter.new(print_settings)
|
printer = Printer::ReceiptPrinter.new(print_settings)
|
||||||
filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings, false, nil,cashier_terminal,sale.sale_items,sale,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "VOID",current_balance,nil,other_amount,nil,nil,nil)
|
filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings, false, nil,cashier_terminal,sale.sale_items,sale,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "VOID",current_balance,nil,other_amount,nil,nil,nil)
|
||||||
result = {
|
result = {
|
||||||
:filepath => filename,
|
:filepath => filename,
|
||||||
:printer_model => print_settings.brand_name,
|
:printer_model => print_settings.brand_name,
|
||||||
:printer_url => print_settings.api_settings
|
:printer_url => print_settings.api_settings
|
||||||
}
|
}
|
||||||
|
|
||||||
# Mobile Print
|
# Mobile Print
|
||||||
render :json => result.to_json
|
render :json => result.to_json
|
||||||
# end
|
# end
|
||||||
|
|
||||||
#end print
|
#end print
|
||||||
|
|
||||||
# update complete order items in oqs
|
# update complete order items in oqs
|
||||||
SaleOrder.where("sale_id = '#{ sale_id }'").find_each do |sodr|
|
SaleOrder.where("sale_id = '#{ sale_id }'").find_each do |sodr|
|
||||||
AssignedOrderItem.where("order_id = '#{ sodr.order_id }'").find_each do |aoi|
|
AssignedOrderItem.where("order_id = '#{ sodr.order_id }'").find_each do |aoi|
|
||||||
aoi.delivery_status = 1
|
aoi.delivery_status = 1
|
||||||
aoi.save
|
aoi.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private
|
private
|
||||||
# Use callbacks to share common setup or constraints between actions.
|
# Use callbacks to share common setup or constraints between actions.
|
||||||
def set_transactions_sale
|
def set_transactions_sale
|
||||||
|
|||||||
@@ -227,8 +227,8 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker
|
|||||||
count = printer_settings.print_copies
|
count = printer_settings.print_copies
|
||||||
|
|
||||||
# override print copies for print worker loop
|
# override print copies for print worker loop
|
||||||
print_settings.print_copies = 1
|
# print_settings.print_copies = 1
|
||||||
print_settings.save!
|
# print_settings.save!
|
||||||
end
|
end
|
||||||
directory_name = 'public/receipts'
|
directory_name = 'public/receipts'
|
||||||
Dir.mkdir(directory_name) unless File.exists?(directory_name)
|
Dir.mkdir(directory_name) unless File.exists?(directory_name)
|
||||||
|
|||||||
@@ -11,37 +11,23 @@ class Promotion < ApplicationRecord
|
|||||||
PROMO_TYPE3 = "Net_price" # 1800 => 1000 => 1000
|
PROMO_TYPE3 = "Net_price" # 1800 => 1000 => 1000
|
||||||
PROMO_TYPE4 = "Percentage"
|
PROMO_TYPE4 = "Percentage"
|
||||||
|
|
||||||
|
def is_promo_day
|
||||||
|
promo_day.include? Date.today.wday.to_s
|
||||||
|
end
|
||||||
|
|
||||||
def self.promo_activate(saleObj)
|
def self.promo_activate(saleObj)
|
||||||
array_same =[]
|
|
||||||
current_day = Time.now.strftime("%Y-%m-%d")
|
current_day = Time.now.strftime("%Y-%m-%d")
|
||||||
current_time = Time.now.strftime('%H:%M:%S')
|
current_time = Time.now.strftime('%H:%M:%S')
|
||||||
day = Date.today.wday
|
day = Date.today.wday
|
||||||
promoList = is_between_promo_datetime(current_day,current_time)
|
promoList = is_between_promo_datetime(current_day,current_time)
|
||||||
puts "promoList - " + promoList.size.to_s
|
|
||||||
if promoList.size > 0
|
promoList.each do |promo|
|
||||||
itemList = combine_item(saleObj)
|
if promo.is_promo_day
|
||||||
itemList.each do|list|
|
if item = saleObj.qty_of(promo.original_product)
|
||||||
list.each do |l|
|
check_promo_type(promo, item, saleObj)
|
||||||
array_same.push({
|
|
||||||
item_instance_code: l.item_instance_code,
|
|
||||||
order_id:l.order_id,
|
|
||||||
qty:l.qty
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
item_list =[]
|
|
||||||
array_same.group_by do |same|
|
|
||||||
same.values_at :item_instance_code
|
|
||||||
end.map do |(item_instance_code), array_same|
|
|
||||||
quantities = array_same.map { |p| p[:qty] }
|
|
||||||
qty = quantities.all? ? quantities.reduce(:+) : nil
|
|
||||||
item_list.push({ item_instance_code: item_instance_code, qty: qty })
|
|
||||||
end
|
|
||||||
Rails.logger.debug "-------promo_activate array_same-------"
|
|
||||||
puts item_list.to_json
|
|
||||||
is_promo_day(promoList,day, item_list, saleObj.sale_id)
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.is_between_promo_datetime(current_day,current_time) #database is not local time
|
def self.is_between_promo_datetime(current_day,current_time) #database is not local time
|
||||||
@@ -49,45 +35,7 @@ class Promotion < ApplicationRecord
|
|||||||
return promoList
|
return promoList
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.combine_item(saleObj)
|
def self.check_promo_type(promo, orderitem, saleObj)
|
||||||
# order_id = saleObj.sale_orders[0][0].order_id
|
|
||||||
# itemList = OrderItem.where("order_id = ?", order_id).group(:item_instance_code).sum(:qty)
|
|
||||||
# array_same =[]
|
|
||||||
itemList = []
|
|
||||||
saleObj.sale_orders.each do |so|
|
|
||||||
# itemList << OrderItem.where("order_id = ?",so.order_id).group(["item_instance_code", "order_id"]).sum(:qty)
|
|
||||||
itemList << OrderItem.where("order_id = ?",so.order_id).select(:item_instance_code,:order_id,:qty)
|
|
||||||
end
|
|
||||||
|
|
||||||
return itemList
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.is_promo_day(promoList, day, orderitemList, sale_id)
|
|
||||||
puts "Today date - " + day.to_s
|
|
||||||
promoList.each do |promo|
|
|
||||||
dayresult = promo.promo_day.include?(day.to_s)
|
|
||||||
if dayresult
|
|
||||||
orderitemList.each do |item|
|
|
||||||
find_promo_item(promo, item, sale_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.find_promo_item(promo, orderitem, sale_id)
|
|
||||||
item_code = OrderItem.find_by_item_instance_code(orderitem[:item_instance_code]).item_code
|
|
||||||
# orderitem.each do |odr_item|
|
|
||||||
if promo.original_product.downcase.to_s == orderitem[:item_instance_code]
|
|
||||||
if promo.min_qty.to_i > orderitem[:qty].to_i
|
|
||||||
return false
|
|
||||||
else
|
|
||||||
check_promo_type(promo,orderitem, sale_id)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.check_promo_type(promo, orderitem, sale_id)
|
|
||||||
promo.promotion_products.each do |promo_product|
|
promo.promotion_products.each do |promo_product|
|
||||||
if promo_product.item_code.downcase == orderitem[:item_instance_code]
|
if promo_product.item_code.downcase == orderitem[:item_instance_code]
|
||||||
same = true
|
same = true
|
||||||
@@ -97,20 +45,20 @@ class Promotion < ApplicationRecord
|
|||||||
end
|
end
|
||||||
# same, promo_product = check_giveaway_product(promo, orderitem[0][0])
|
# same, promo_product = check_giveaway_product(promo, orderitem[0][0])
|
||||||
if promo.promo_type == Promotion::PROMO_TYPE1
|
if promo.promo_type == Promotion::PROMO_TYPE1
|
||||||
if same
|
if same
|
||||||
give_promotion_same_product(orderitem[:qty], promo.min_qty, promo_product.min_qty, orderitem, sale_id,promo_product.item_code)
|
give_promotion_same_product(orderitem[:qty], promo.min_qty, promo_product.min_qty, orderitem, saleObj, promo_product.item_code)
|
||||||
else
|
else
|
||||||
give_promotion_second_product(orderitem[:qty], promo.min_qty, promo_product.item_code, orderitem, sale_id)
|
give_promotion_second_product(orderitem[:qty], promo.min_qty, promo_product.item_code, orderitem, saleObj)
|
||||||
end
|
end
|
||||||
|
|
||||||
elsif promo.promo_type == Promotion::PROMO_TYPE2
|
elsif promo.promo_type == Promotion::PROMO_TYPE2
|
||||||
give_promotion_nett_off(same,promo_product,promo.min_qty, orderitem, sale_id)
|
give_promotion_nett_off(same,promo_product,promo.min_qty, orderitem, saleObj)
|
||||||
|
|
||||||
elsif promo.promo_type == Promotion::PROMO_TYPE3
|
elsif promo.promo_type == Promotion::PROMO_TYPE3
|
||||||
give_promotion_nett_price(same,promo_product,promo.min_qty, orderitem, sale_id)
|
give_promotion_nett_price(same,promo_product,promo.min_qty, orderitem, saleObj)
|
||||||
|
|
||||||
elsif promo.promo_type == Promotion::PROMO_TYPE4
|
elsif promo.promo_type == Promotion::PROMO_TYPE4
|
||||||
give_promotion_discount(same,promo_product,promo.min_qty, orderitem, sale_id)
|
give_promotion_discount(same,promo_product,promo.min_qty, orderitem, saleObj)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -128,106 +76,66 @@ class Promotion < ApplicationRecord
|
|||||||
# end
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.give_promotion_same_product(qty, promoqty, foc_min_qty, orderitem, sale_id,promo_product)
|
def self.give_promotion_same_product(qty, promoqty, foc_min_qty, orderitem, saleObj,promo_product)
|
||||||
item =''
|
puts " Order qty: " + qty.to_s + " / promoqty: " + promoqty.to_s + " / giveaway: " + foc_min_qty.to_s
|
||||||
puts " Order qty: " + qty.to_s + " / promoqty: " + promoqty.to_s + " / giveaway: " + foc_min_qty.to_s
|
multiple = qty.to_i / promoqty.to_i # loop count
|
||||||
multiple = qty.to_i / promoqty.to_i # loop count
|
charge_qty = 0
|
||||||
charge_qty = 0
|
foc_qty = 0
|
||||||
foc_qty = 0
|
if multiple > 0
|
||||||
if multiple > 0
|
multiple.times.each do |key|
|
||||||
multiple.times.each do |key|
|
if qty > promoqty
|
||||||
if qty > promoqty
|
charge_qty += promoqty
|
||||||
charge_qty += promoqty
|
different = qty - promoqty
|
||||||
different = qty - promoqty
|
qty = different
|
||||||
qty = different
|
if different == 0
|
||||||
if different == 0
|
foc_qty += foc_min_qty
|
||||||
foc_qty += foc_min_qty
|
|
||||||
else
|
|
||||||
foc_qty += foc_min_qty
|
|
||||||
qty = qty - foc_min_qty
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
charge_qty += qty
|
foc_qty += foc_min_qty
|
||||||
|
qty = qty - foc_min_qty
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
charge_qty += qty
|
||||||
end
|
end
|
||||||
if multiple == foc_qty
|
end
|
||||||
charge_qty += qty
|
if multiple == foc_qty
|
||||||
end
|
|
||||||
else
|
|
||||||
charge_qty += qty
|
charge_qty += qty
|
||||||
end
|
end
|
||||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
else
|
||||||
price =0
|
charge_qty += qty
|
||||||
source =''
|
end
|
||||||
sale_order.each do|order|
|
|
||||||
source = Order.find(order.order_id).source
|
|
||||||
end
|
|
||||||
|
|
||||||
item = OrderItem.where("item_instance_code = ?",orderitem[:item_instance_code]).order("order_items_id DESC").first
|
price = 0
|
||||||
item ={
|
source = saleObj.orders.first.source
|
||||||
item_code:item.item_code,
|
item = saleObj.order_items.where(item_instance_code: promo_product).first
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
if promo_product.downcase != item[:item_instance_code]
|
|
||||||
|
|
||||||
sale_order.each do|order|
|
if !item.nil?
|
||||||
source = Order.find(order.order_id).source
|
update_existing_item(foc_qty, item, saleObj, "promotion", item[:price], source)
|
||||||
end
|
end
|
||||||
item = OrderItem.where("item_code = ?",promo_product).order("order_items_id DESC").first
|
|
||||||
item ={
|
|
||||||
item_code:item.item_code,
|
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
end
|
|
||||||
if !item.nil?
|
|
||||||
update_existing_item(foc_qty, item, sale_id, "promotion", item[:price],source)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
# AA - 10 # 3 # BB # orderList, #S34345
|
# AA - 10 # 3 # BB # orderList, #S34345
|
||||||
def self.give_promotion_second_product(orderitem_count, foc_min_qty, promo_product, orderitem, sale_id)
|
def self.give_promotion_second_product(orderitem_count, foc_min_qty, promo_product, orderitem, saleObj)
|
||||||
source =''
|
|
||||||
item =''
|
|
||||||
puts "..... orderitem_count: " + orderitem_count.to_s + " / foc_min_qty: " + foc_min_qty.to_s + " /promo_product: " + promo_product + " orderitem: " + orderitem.to_s
|
puts "..... orderitem_count: " + orderitem_count.to_s + " / foc_min_qty: " + foc_min_qty.to_s + " /promo_product: " + promo_product + " orderitem: " + orderitem.to_s
|
||||||
|
|
||||||
promotion_qty = orderitem_count.to_i / foc_min_qty.to_i # get foc item qty
|
promotion_qty = orderitem_count.to_i / foc_min_qty.to_i # get foc item qty
|
||||||
foc_qty = find_second_item_qty(sale_id, promo_product)
|
foc_qty = saleObj.qty_of(promo_product).qty rescue 0
|
||||||
if (foc_qty < promotion_qty)
|
if (foc_qty < promotion_qty)
|
||||||
promotion_qty = foc_qty
|
promotion_qty = foc_qty
|
||||||
end
|
end
|
||||||
# item = OrderItem.find_by_item_instance_code(promo_product)
|
# item = OrderItem.find_by_item_instance_code(promo_product)
|
||||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
|
||||||
price =0
|
price = 0
|
||||||
sale_order.each do|order|
|
source = saleObj.orders.first.source
|
||||||
source = Order.find(order.order_id).source
|
item = saleObj.order_items.where(item_instance_code: promo_product).first
|
||||||
end
|
|
||||||
item = OrderItem.where("item_instance_code = ?",promo_product).order("order_items_id DESC").first
|
|
||||||
item ={
|
|
||||||
item_code:item.item_code,
|
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
# item = OrderItem.where("item_instance_code = '#{promo_product}' and order_id = '#{orderitem[0][1]}'").first
|
|
||||||
if !item.nil?
|
if !item.nil?
|
||||||
# source = Order.find(item.order_id).source
|
update_existing_item(promotion_qty, item, saleObj, "promotion", item[:price],source)
|
||||||
update_existing_item(promotion_qty, item, sale_id, "promotion", item[:price],source)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.update_existing_item(qty, item, saleObj, type, item_price,source)
|
||||||
def self.update_existing_item(qty, item, sale_id, type, item_price,source)
|
if qty > 0
|
||||||
if qty >0
|
|
||||||
menu_category = MenuCategory.get_menu_category(item[:item_code]) #get menu category for menu items
|
menu_category = MenuCategory.get_menu_category(item[:item_code]) #get menu category for menu items
|
||||||
|
|
||||||
sale_item = SaleItem.new
|
sale_item = SaleItem.new
|
||||||
if !menu_category.nil?
|
if !menu_category.nil?
|
||||||
sale_item.menu_category_code = menu_category.code
|
sale_item.menu_category_code = menu_category.code
|
||||||
@@ -247,216 +155,85 @@ class Promotion < ApplicationRecord
|
|||||||
sale_item.price = qty * item_price * (-1)
|
sale_item.price = qty * item_price * (-1)
|
||||||
|
|
||||||
sale_item.is_taxable = 1
|
sale_item.is_taxable = 1
|
||||||
sale_item.sale_id = sale_id
|
sale_item.sale = saleObj
|
||||||
sale_item.save
|
sale_item.save
|
||||||
sale = Sale.find(sale_id)
|
|
||||||
sale.compute_by_sale_items(sale.id, sale.sale_items, sale.total_discount,nil,source)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
def self.give_promotion_nett_off(same, promo_product, foc_min_qty, orderitem, sale_id)
|
|
||||||
item =''
|
|
||||||
source =''
|
|
||||||
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
|
||||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
|
||||||
if same
|
|
||||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
|
||||||
# item = OrderItem.find_by_item_instance_code(orderitem[0][0])
|
|
||||||
|
|
||||||
price =0
|
|
||||||
sale_order.each do|order|
|
|
||||||
source = Order.find(order.order_id).source
|
|
||||||
end
|
|
||||||
item = OrderItem.where("item_instance_code = ?",orderitem[:item_instance_code]).order("order_items_id DESC").first
|
|
||||||
item ={
|
|
||||||
item_code:item.item_code,
|
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
# item = OrderItem.where("item_instance_code = '#{orderitem[0][0]}' and order_id = '#{orderitem[0][1]}'").first
|
|
||||||
if !item.nil?
|
|
||||||
# source = Order.find(item.order_id).source
|
|
||||||
update_existing_item(foc_qty, item, sale_id, "promotion nett off", promo_product.net_off,source)
|
|
||||||
end
|
|
||||||
|
|
||||||
else
|
saleObj.sale_items << sale_item
|
||||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
saleObj.compute_by_sale_items(saleObj.total_discount, nil, source)
|
||||||
# foc_qty = find_second_item_qty(sale_id, promo_product.item_code)
|
|
||||||
# item = OrderItem.find_by_item_instance_code(promo_product.item_code)
|
|
||||||
# item = OrderItem.where("item_instance_code = '#{promo_product.item_code}' and order_id = '#{orderitem[0][1]}'").first
|
|
||||||
sale_order.each do|order|
|
|
||||||
source = Order.find(order.order_id).source
|
|
||||||
end
|
|
||||||
item = OrderItem.where("item_instance_code = ?",promo_product.item_code).order("order_items_id DESC").first
|
|
||||||
item ={
|
|
||||||
item_code:item.item_code,
|
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
if !item.nil?
|
|
||||||
# source = Order.find(item.order_id).source
|
|
||||||
update_existing_item(foc_qty, item, sale_id, "promotion nett off", promo_product.net_off,source)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.give_promotion_nett_price(same, promo_product, foc_min_qty, orderitem, sale_id)
|
|
||||||
|
def self.give_promotion_nett_off(same, promo_product, foc_min_qty, orderitem, saleObj)
|
||||||
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
||||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
|
||||||
source =''
|
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||||
item =''
|
if !same
|
||||||
if same
|
order_qty = saleObj.qty_of(promo_product.item_code).qty rescue 0
|
||||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
|
||||||
# item = OrderItem.find_by_item_instance_code(orderitem[0][0]) # need to specify with menu item instance
|
|
||||||
# item = OrderItem.where("item_instance_code = '#{orderitem[0][0]}' and order_id = '#{orderitem[0][1]}'").first
|
|
||||||
sale_order.each do|order|
|
|
||||||
source = Order.find(order.order_id).source
|
|
||||||
end
|
|
||||||
item = OrderItem.where("item_instance_code = ?",orderitem[:item_instance_code]).order("order_items_id DESC").first
|
|
||||||
item ={
|
|
||||||
item_code:item.item_code,
|
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
if !item.nil?
|
|
||||||
price = item[:price].to_i - promo_product.net_price.to_i
|
|
||||||
# source = Order.find(item.order_id).source
|
|
||||||
update_existing_item(foc_qty, item, sale_id, "promotion nett price", price,source)
|
|
||||||
end
|
|
||||||
|
|
||||||
else
|
|
||||||
order_qty = find_second_item_qty(sale_id, promo_product.item_code)# need to check for qty
|
|
||||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||||
|
|
||||||
if foc_qty > order_qty
|
if foc_qty > order_qty
|
||||||
foc_qty = order_qty
|
foc_qty = order_qty
|
||||||
end
|
end
|
||||||
# item = OrderItem.find_by_item_instance_code(promo_product.item_code)
|
end
|
||||||
# item = OrderItem.where("item_instance_code = '#{promo_product.item_code}' and order_id = '#{orderitem[0][1]}'").first
|
|
||||||
sale_order.each do|order|
|
|
||||||
source = Order.find(order.order_id).source
|
|
||||||
end
|
|
||||||
item = OrderItem.where("item_instance_code",promo_product.item_code).order("order_items_id DESC").first
|
|
||||||
item ={
|
|
||||||
item_code:item.item_code,
|
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
|
|
||||||
if !item.nil?
|
source = saleObj.orders.first.source
|
||||||
price = item[:price].to_i - promo_product.net_price.to_i
|
item = saleObj.order_items.where(item_instance_code: promo_product.item_code).first
|
||||||
# source = Order.find(item.order_id).source
|
|
||||||
update_existing_item(foc_qty, item, sale_id, "promotion nett price", price,source)
|
if !item.nil?
|
||||||
end
|
update_existing_item(foc_qty, item, saleObj, "promotion nett off", promo_product.net_off,source)
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.give_promotion_discount(same, promo_product, foc_min_qty, orderitem, sale_id)
|
def self.give_promotion_nett_price(same, promo_product, foc_min_qty, orderitem, saleObj)
|
||||||
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
||||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
|
||||||
source =''
|
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||||
item =''
|
if !same
|
||||||
if same
|
order_qty = saleObj.qty_of(promo_product.item_code).qty rescue 0
|
||||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||||
# item = OrderItem.find_by_item_instance_code(orderitem[0][0])
|
|
||||||
# item = OrderItem.where("item_instance_code = '#{orderitem[0][0]}' and order_id = '#{orderitem[0][1]}'").first
|
|
||||||
sale_order.each do|order|
|
|
||||||
source = Order.find(order.order_id).source
|
|
||||||
end
|
|
||||||
item = OrderItem.where("item_instance_code = ?",orderitem[:item_instance_code]).order("order_items_id DESC").first
|
|
||||||
item ={
|
|
||||||
item_code:item.item_code,
|
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
# total = orderitem[1].to_i * item.price
|
|
||||||
if !item.nil?
|
|
||||||
total = item[:price]
|
|
||||||
price = calculate_discount(total, promo_product.percentage)
|
|
||||||
# source = Order.find(item.order_id).source
|
|
||||||
update_existing_item(foc_qty, item, sale_id, "promotion discount", price,source)
|
|
||||||
end
|
|
||||||
|
|
||||||
else
|
|
||||||
order_qty = find_second_item_qty(sale_id, promo_product.item_code) #need to check
|
|
||||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
|
||||||
# give total qty is 1
|
|
||||||
#foc_qty = (foc_qty - foc_qty) + 1
|
|
||||||
if foc_qty > order_qty
|
if foc_qty > order_qty
|
||||||
foc_qty = order_qty
|
foc_qty = order_qty
|
||||||
end
|
end
|
||||||
# item = OrderItem.find_by_item_instance_code(promo_product.item_code)
|
end
|
||||||
# item = OrderItem.where("item_instance_code = '#{promo_product.item_code}' and order_id = '#{orderitem[0][1]}'").first
|
|
||||||
sale_order.each do|order|
|
source = saleObj.orders.first.source
|
||||||
source = Order.find(order.order_id).source
|
item = saleObj.order_items.where(item_instance_code: promo_product.item_code).first
|
||||||
end
|
|
||||||
item = OrderItem.where("item_instance_code = ?",promo_product.item_code).order("order_items_id DESC").first
|
if !item.nil?
|
||||||
item ={
|
price = item[:price].to_i - promo_product.net_price.to_i
|
||||||
item_code:item.item_code,
|
update_existing_item(foc_qty, item, saleObj, "promotion nett price", price,source)
|
||||||
item_instance_code:item.item_instance_code,
|
|
||||||
item_name:item.item_name,
|
|
||||||
alt_name:item.alt_name,
|
|
||||||
account_id:item.account_id,
|
|
||||||
price:item.price
|
|
||||||
}
|
|
||||||
# total = item.price * foc_qty
|
|
||||||
if !item.nil?
|
|
||||||
total = item[:price]
|
|
||||||
price = calculate_discount(total, promo_product.percentage)
|
|
||||||
# source = Order.find(item.order_id).source
|
|
||||||
update_existing_item(foc_qty, item, sale_id, "promotion discount", price,source)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.find_second_item_qty(sale_id, promo_item)
|
def self.give_promotion_discount(same, promo_product, foc_min_qty, orderitem, saleObj)
|
||||||
array_same =[]
|
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
||||||
saleObj = Sale.find_by_sale_id(sale_id)
|
|
||||||
itemList = combine_item(saleObj)
|
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||||
itemList.each do|list|
|
if !same
|
||||||
list.each do |l|
|
order_qty = saleObj.qty_of(promo_product.item_code).qty rescue 0
|
||||||
array_same.push({
|
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||||
item_instance_code: l.item_instance_code,
|
|
||||||
order_id:l.order_id,
|
if foc_qty > order_qty
|
||||||
qty:l.qty
|
foc_qty = order_qty
|
||||||
})
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
item_list =[]
|
|
||||||
array_same.group_by do |same|
|
|
||||||
same.values_at :item_instance_code
|
|
||||||
end.map do |(item_instance_code), array_same|
|
|
||||||
quantities = array_same.map { |p| p[:qty] }
|
|
||||||
qty = quantities.all? ? quantities.reduce(:+) : nil
|
|
||||||
item_list.push({ item_instance_code: item_instance_code, qty: qty })
|
|
||||||
end
|
|
||||||
item_list.each do |item|
|
|
||||||
if item[:item_instance_code] == promo_item.downcase
|
|
||||||
return item[:qty].to_i
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.calculate_discount(total, percentage)
|
source = saleObj.orders.first.source
|
||||||
return (total.to_i * percentage.to_i) / 100
|
item = saleObj.order_items.where(item_instance_code: promo_product.item_code).first
|
||||||
end
|
puts saleObj
|
||||||
|
puts item
|
||||||
|
# total = orderitem[1].to_i * item.price
|
||||||
|
if item
|
||||||
|
total = item[:price]
|
||||||
|
price = calculate_discount(total, promo_product.percentage)
|
||||||
|
# source = Order.find(item.order_id).source
|
||||||
|
update_existing_item(foc_qty, item, saleObj, "promotion discount", price,source)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.calculate_discount(total, percentage)
|
||||||
|
return (total * percentage) / 100
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -14,14 +14,20 @@ class Sale < ApplicationRecord
|
|||||||
has_many :sale_payments
|
has_many :sale_payments
|
||||||
has_many :sale_orders
|
has_many :sale_orders
|
||||||
has_many :orders, through: :sale_orders
|
has_many :orders, through: :sale_orders
|
||||||
|
has_many :order_items, through: :sale_orders
|
||||||
has_many :bookings
|
has_many :bookings
|
||||||
has_many :product_commissions
|
has_many :product_commissions
|
||||||
|
|
||||||
|
before_validation :round_to_precision
|
||||||
after_update :update_stock_journal
|
after_update :update_stock_journal
|
||||||
|
|
||||||
scope :open_invoices, -> { where("sale_status = 'new' and receipt_date BETWEEN '#{DateTime.now.utc.end_of_day}' AND '#{DateTime.now.utc.beginning_of_day}'") }
|
scope :open_invoices, -> { where("sale_status = 'new' and receipt_date BETWEEN '#{DateTime.now.utc.end_of_day}' AND '#{DateTime.now.utc.beginning_of_day}'") }
|
||||||
scope :complete_sale, -> { where("sale_status = 'completed' and receipt_date BETWEEN '#{DateTime.now.utc.beginning_of_day}' AND '#{DateTime.now.utc.end_of_day}'") }
|
scope :complete_sale, -> { where("sale_status = 'completed' and receipt_date BETWEEN '#{DateTime.now.utc.beginning_of_day}' AND '#{DateTime.now.utc.end_of_day}'") }
|
||||||
|
|
||||||
|
def qty_of(item_instance_code)
|
||||||
|
order_items.select(:order_items_id, :item_instance_code, 'SUM(qty) as qty').where(item_instance_code: item_instance_code).group(:item_instance_code).first
|
||||||
|
end
|
||||||
|
|
||||||
REPORT_TYPE = {
|
REPORT_TYPE = {
|
||||||
"daily" => 0,
|
"daily" => 0,
|
||||||
"monthly" => 1,
|
"monthly" => 1,
|
||||||
@@ -355,8 +361,8 @@ class Sale < ApplicationRecord
|
|||||||
sale_item.save
|
sale_item.save
|
||||||
|
|
||||||
# Re-calc
|
# Re-calc
|
||||||
sale = Sale.find(self.id)
|
self.sale_items << sale_item
|
||||||
self.compute_by_sale_items(self.id, sale.sale_items, self.total_discount, nil, order_source)
|
self.compute_by_sale_items(self.total_discount, nil, order_source)
|
||||||
end
|
end
|
||||||
def create_saleitem_indutycharges(chargeObj, current_checkin_induties_count, induties_pay_amount, dining_name, dining_time, order_source = nil, basic_pay_amount)
|
def create_saleitem_indutycharges(chargeObj, current_checkin_induties_count, induties_pay_amount, dining_name, dining_time, order_source = nil, basic_pay_amount)
|
||||||
sale_item = SaleItem.new
|
sale_item = SaleItem.new
|
||||||
@@ -374,8 +380,8 @@ class Sale < ApplicationRecord
|
|||||||
sale_item.price = induties_pay_amount
|
sale_item.price = induties_pay_amount
|
||||||
sale_item.save
|
sale_item.save
|
||||||
# Re-calc
|
# Re-calc
|
||||||
sale = Sale.find(self.id)
|
self.sale_items << sale_item
|
||||||
self.compute_by_sale_items(self.id, sale.sale_items, self.total_discount, nil, order_source)
|
self.compute_by_sale_items(self.total_discount, nil, order_source)
|
||||||
end
|
end
|
||||||
def update_item (item)
|
def update_item (item)
|
||||||
#save sale_audit
|
#save sale_audit
|
||||||
@@ -397,14 +403,12 @@ class Sale < ApplicationRecord
|
|||||||
|
|
||||||
#compute - invoice total
|
#compute - invoice total
|
||||||
def compute(order_source = nil, tax_type = nil)
|
def compute(order_source = nil, tax_type = nil)
|
||||||
sales_items = self.sale_items
|
|
||||||
|
|
||||||
#Computation Fields
|
#Computation Fields
|
||||||
subtotal_price = 0
|
subtotal_price = 0
|
||||||
total_taxable = 0
|
total_taxable = 0
|
||||||
rounding_adjustment = 0
|
rounding_adjustment = 0
|
||||||
|
|
||||||
sales_items.each do |item|
|
self.sale_items.each do |item|
|
||||||
#compute each item and added to total
|
#compute each item and added to total
|
||||||
subtotal_price = subtotal_price + item.price
|
subtotal_price = subtotal_price + item.price
|
||||||
|
|
||||||
@@ -418,66 +422,59 @@ class Sale < ApplicationRecord
|
|||||||
apply_tax(total_taxable, order_source, tax_type)
|
apply_tax(total_taxable, order_source, tax_type)
|
||||||
|
|
||||||
self.total_amount = subtotal_price
|
self.total_amount = subtotal_price
|
||||||
self.total_discount = total_discount
|
# self.total_discount = total_discount
|
||||||
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
||||||
self.grand_total_round
|
# self.grand_total_round
|
||||||
#compute rounding adjustment
|
#compute rounding adjustment
|
||||||
adjust_rounding
|
# adjust_rounding
|
||||||
|
|
||||||
self.save!
|
self.save!
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
#compute - invoice total
|
#compute - invoice total
|
||||||
def compute_by_sale_items(sale_id, sale_itemss, total_discount,discount_type=nil,order_source=nil,tax_type=nil,type=nil)
|
def compute_by_sale_items(total_discount, discount_type=nil, order_source=nil, tax_type=nil, type=nil)
|
||||||
shop = Shop.first
|
shop = Shop.first
|
||||||
sale = Sale.find(sale_id)
|
|
||||||
sales_items = sale_itemss
|
|
||||||
|
|
||||||
#Computation Fields
|
#Computation Fields
|
||||||
subtotal_price = 0
|
subtotal_price = 0
|
||||||
total_taxable = 0
|
total_taxable = 0
|
||||||
rounding_adjustment = 0
|
rounding_adjustment = 0
|
||||||
|
|
||||||
sales_items.each do |item|
|
self.sale_items.each do |item|
|
||||||
#compute each item and added to total
|
#compute each item and added to total
|
||||||
subtotal_price = subtotal_price + item.price
|
subtotal_price = subtotal_price + item.price
|
||||||
|
|
||||||
# check for item is taxable and calculate
|
# check for item is taxable and calculate
|
||||||
if item.is_taxable
|
if item.is_taxable
|
||||||
total_taxable = total_taxable + item.taxable_price
|
total_taxable = total_taxable + item.taxable_price
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
compute_tax(sale, total_taxable, total_discount, order_source, tax_type)
|
|
||||||
sale.total_amount = subtotal_price
|
compute_tax(total_taxable, total_discount, order_source, tax_type)
|
||||||
sale.total_discount = total_discount
|
self.total_amount = subtotal_price
|
||||||
|
self.total_discount = total_discount
|
||||||
if type =="foc"
|
if type =="foc"
|
||||||
sale.grand_total = 0
|
self.grand_total = 0
|
||||||
else
|
else
|
||||||
sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax
|
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
||||||
sale.grand_total_round
|
# sale.grand_total_round
|
||||||
end
|
end
|
||||||
|
|
||||||
if discount_type == "member_discount"
|
if discount_type == "member_discount"
|
||||||
sale.discount_type = discount_type
|
self.discount_type = discount_type
|
||||||
end
|
end
|
||||||
#compute rounding adjustment
|
#compute rounding adjustment
|
||||||
# adjust_rounding
|
# adjust_rounding
|
||||||
sale.rounding_adjustment = compute_adjust_rounding(sale.grand_total)
|
self.save!
|
||||||
|
|
||||||
sale.save!
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# No Use too many wrong
|
# No Use too many wrong
|
||||||
def compute_without_void(order_source = nil)
|
def compute_without_void(order_source = nil)
|
||||||
sales_items = self.sale_items
|
|
||||||
|
|
||||||
#Computation Fields
|
#Computation Fields
|
||||||
subtotal_price = 0
|
subtotal_price = 0
|
||||||
total_taxable = 0
|
total_taxable = 0
|
||||||
rounding_adjustment = 0
|
rounding_adjustment = 0
|
||||||
|
|
||||||
sales_items.each do |item|
|
self.sale_items.each do |item|
|
||||||
if item.status != 'void' && item.status != 'foc'
|
if item.status != 'void' && item.status != 'foc'
|
||||||
#compute each item and added to total
|
#compute each item and added to total
|
||||||
subtotal_price = subtotal_price + item.price
|
subtotal_price = subtotal_price + item.price
|
||||||
@@ -491,17 +488,17 @@ class Sale < ApplicationRecord
|
|||||||
|
|
||||||
apply_tax(total_taxable, order_source)
|
apply_tax(total_taxable, order_source)
|
||||||
self.total_amount = subtotal_price
|
self.total_amount = subtotal_price
|
||||||
self.total_discount = total_discount
|
# self.total_discount = total_discount
|
||||||
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
||||||
self.grand_total_round
|
# self.grand_total_round
|
||||||
#compute rounding adjustment
|
#compute rounding adjustment
|
||||||
adjust_rounding
|
# adjust_rounding
|
||||||
|
|
||||||
self.save!
|
self.save!
|
||||||
end
|
end
|
||||||
|
|
||||||
# Tax Re-Calculte
|
# Tax Re-Calculte
|
||||||
def compute_tax(sale, total_taxable, total_discount = 0, order_source = nil, tax_type=nil)
|
def compute_tax(total_taxable, total_discount = 0, order_source = nil, tax_type=nil)
|
||||||
shop = Shop.first
|
shop = Shop.first
|
||||||
|
|
||||||
#if tax is not apply create new record
|
#if tax is not apply create new record
|
||||||
@@ -509,93 +506,49 @@ class Sale < ApplicationRecord
|
|||||||
# #delete existing and create new
|
# #delete existing and create new
|
||||||
# existing_tax.delete
|
# existing_tax.delete
|
||||||
# end
|
# end
|
||||||
taxes = SaleTax.where("sale_id='#{sale.sale_id}'").pluck(:sale_tax_id)
|
taxes = SaleTax.where("sale_id='#{self.sale_id}'").destroy_all
|
||||||
SaleTax.where("sale_tax_id IN (?)", taxes).destroy_all
|
|
||||||
|
|
||||||
total_tax_amount = 0
|
total_tax_amount = 0
|
||||||
tax_incl_exec = "exclusive"
|
tax_incl_exec = "exclusive"
|
||||||
#tax_profile - list by order_by
|
#tax_profile - list by order_by
|
||||||
# tax_profiles = TaxProfile.all.order("order_by asc")
|
# tax_profiles = TaxProfile.all.order("order_by asc")
|
||||||
# customer = Customer.find(sale.customer_id)
|
# customer = Customer.find(sale.customer_id)
|
||||||
arr_tax = []
|
|
||||||
arr_tax = unique_tax_profiles(order_source, self.customer_id)
|
|
||||||
|
|
||||||
if !arr_tax.empty?
|
|
||||||
if tax_type.nil?
|
|
||||||
tax_profiles = TaxProfile.where(:id => arr_tax)
|
|
||||||
else
|
|
||||||
tax_profiles = TaxProfile.where("group_type=?",order_source)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
tax_profiles = TaxProfile.where("group_type=?",order_source)
|
|
||||||
end
|
|
||||||
|
|
||||||
# #Creat new tax records
|
|
||||||
if order_source.to_s == "emenu"
|
if order_source.to_s == "emenu"
|
||||||
order_source = "cashier"
|
order_source = "cashier"
|
||||||
end
|
end
|
||||||
|
|
||||||
if sale.payment_status != 'foc'
|
tax_profiles = unique_tax_profiles(order_source, self.customer_id)
|
||||||
|
|
||||||
|
# #Creat new tax records
|
||||||
|
if self.payment_status != 'foc'
|
||||||
tax_profiles.each do |tax|
|
tax_profiles.each do |tax|
|
||||||
if tax.group_type.to_s == order_source.to_s
|
sale_tax = SaleTax.new(:sale => self)
|
||||||
if tax_type
|
sale_tax.tax_name = tax.name
|
||||||
if tax_type.to_s == tax.name.to_s || tax_type == 'all'
|
sale_tax.tax_rate = tax.rate
|
||||||
sale_tax = SaleTax.new(:sale => sale)
|
|
||||||
sale_tax.tax_name = tax.name
|
|
||||||
sale_tax.tax_rate = tax.rate
|
|
||||||
|
|
||||||
# substract , to give after discount
|
# substract , to give after discount
|
||||||
total_tax = total_taxable - total_discount
|
total_tax = total_taxable - total_discount
|
||||||
#include or execulive
|
#include or execulive
|
||||||
if tax.inclusive
|
if tax.inclusive
|
||||||
tax_incl_exec = "inclusive"
|
tax_incl_exec = "inclusive"
|
||||||
rate = tax.rate
|
rate = tax.rate
|
||||||
divided_value = (100 + rate)/rate
|
divided_value = (100 + rate)/rate
|
||||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
sale_tax.tax_payable_amount = total_tax / divided_value
|
||||||
else
|
else
|
||||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
||||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||||
end
|
|
||||||
#new taxable amount is standard rule for step by step
|
|
||||||
if shop.calc_tax_order
|
|
||||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
|
||||||
end
|
|
||||||
sale_tax.inclusive = tax.inclusive
|
|
||||||
sale_tax.save
|
|
||||||
end
|
|
||||||
else
|
|
||||||
# customer.tax_profiles.each do |cus_tax|
|
|
||||||
# if cus_tax.to_i == tax.id
|
|
||||||
sale_tax = SaleTax.new(:sale => sale)
|
|
||||||
sale_tax.tax_name = tax.name
|
|
||||||
sale_tax.tax_rate = tax.rate
|
|
||||||
|
|
||||||
# substract , to give after discount
|
|
||||||
total_tax = total_taxable - total_discount
|
|
||||||
#include or execulive
|
|
||||||
if tax.inclusive
|
|
||||||
tax_incl_exec = "inclusive"
|
|
||||||
rate = tax.rate
|
|
||||||
divided_value = (100 + rate)/rate
|
|
||||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
|
||||||
else
|
|
||||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
|
||||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
|
||||||
end
|
|
||||||
#new taxable amount is standard rule for step by step
|
|
||||||
if shop.calc_tax_order
|
|
||||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
|
||||||
end
|
|
||||||
sale_tax.inclusive = tax.inclusive
|
|
||||||
sale_tax.save
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
#new taxable amount is standard rule for step by step
|
||||||
|
if shop.calc_tax_order
|
||||||
|
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||||
|
end
|
||||||
|
sale_tax.inclusive = tax.inclusive
|
||||||
|
sale_tax.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
sale.tax_type = tax_incl_exec
|
self.tax_type = tax_incl_exec
|
||||||
sale.total_tax = total_tax_amount
|
self.total_tax = total_tax_amount
|
||||||
end
|
end
|
||||||
|
|
||||||
# Tax Calculate
|
# Tax Calculate
|
||||||
@@ -608,8 +561,7 @@ class Sale < ApplicationRecord
|
|||||||
# existing_tax.delete
|
# existing_tax.delete
|
||||||
# end
|
# end
|
||||||
|
|
||||||
taxes = SaleTax.where("sale_id='#{self.sale_id}'").pluck(:sale_tax_id)
|
taxes = SaleTax.where("sale_id='#{self.sale_id}'").destroy_all
|
||||||
SaleTax.where("sale_tax_id IN (?)", taxes).destroy_all
|
|
||||||
|
|
||||||
total_tax_amount = 0
|
total_tax_amount = 0
|
||||||
tax_incl_exec = "exclusive"
|
tax_incl_exec = "exclusive"
|
||||||
@@ -622,77 +574,34 @@ class Sale < ApplicationRecord
|
|||||||
# tax_data = TaxProfile.unscoped.where("group_type=?",order_source).pluck(:id)
|
# tax_data = TaxProfile.unscoped.where("group_type=?",order_source).pluck(:id)
|
||||||
# customer = Customer.find(self.customer_id).tax_profiles
|
# customer = Customer.find(self.customer_id).tax_profiles
|
||||||
|
|
||||||
arr_tax = []
|
tax_profiles = unique_tax_profiles(order_source, self.customer_id)
|
||||||
arr_tax = unique_tax_profiles(order_source, self.customer_id)
|
|
||||||
|
|
||||||
if !arr_tax.empty?
|
|
||||||
if tax_type.nil?
|
|
||||||
tax_profiles = TaxProfile.where(:id => arr_tax)
|
|
||||||
else
|
|
||||||
tax_profiles = TaxProfile.where("group_type=?",order_source)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
tax_profiles = TaxProfile.where("group_type=?",order_source)
|
|
||||||
end
|
|
||||||
#Create new tax records
|
#Create new tax records
|
||||||
tax_profiles.each do |tax|
|
tax_profiles.each do |tax|
|
||||||
if tax.group_type.to_s == order_source.to_s
|
sale_tax = SaleTax.new(:sale => self)
|
||||||
if tax_type
|
sale_tax.tax_name = tax.name
|
||||||
if tax_type.to_s == tax.name.to_s || tax_type == 'all'
|
sale_tax.tax_rate = tax.rate
|
||||||
sale_tax = SaleTax.new(:sale => self)
|
|
||||||
sale_tax.tax_name = tax.name
|
|
||||||
sale_tax.tax_rate = tax.rate
|
|
||||||
|
|
||||||
# substract , to give after discount
|
# substract , to give after discount
|
||||||
total_tax = total_taxable - total_discount
|
total_tax = total_taxable - self.total_discount
|
||||||
#include or execulive
|
#include or execulive
|
||||||
if tax.inclusive
|
if tax.inclusive
|
||||||
tax_incl_exec = "inclusive"
|
tax_incl_exec = "inclusive"
|
||||||
rate = tax.rate
|
rate = tax.rate
|
||||||
divided_value = (100 + rate)/rate
|
divided_value = (100 + rate)/rate
|
||||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
sale_tax.tax_payable_amount = total_tax / divided_value
|
||||||
else
|
else
|
||||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
||||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||||
end
|
|
||||||
#new taxable amount is standard rule for step by step
|
|
||||||
if shop.calc_tax_order
|
|
||||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
|
||||||
end
|
|
||||||
sale_tax.inclusive = tax.inclusive
|
|
||||||
sale_tax.save
|
|
||||||
end
|
|
||||||
else
|
|
||||||
# customer.tax_profiles.each do |cus_tax|
|
|
||||||
# if cus_tax.to_i == tax.id
|
|
||||||
sale_tax = SaleTax.new(:sale => self)
|
|
||||||
sale_tax.tax_name = tax.name
|
|
||||||
sale_tax.tax_rate = tax.rate
|
|
||||||
|
|
||||||
# substract , to give after discount
|
|
||||||
total_tax = total_taxable - self.total_discount
|
|
||||||
#include or execulive
|
|
||||||
if tax.inclusive
|
|
||||||
tax_incl_exec = "inclusive"
|
|
||||||
rate = tax.rate
|
|
||||||
divided_value = (100 + rate)/rate
|
|
||||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
|
||||||
else
|
|
||||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
|
||||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
|
||||||
end
|
|
||||||
|
|
||||||
#new taxable amount is standard rule for step by step
|
|
||||||
if shop.calc_tax_order
|
|
||||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
|
||||||
end
|
|
||||||
|
|
||||||
sale_tax.inclusive = tax.inclusive
|
|
||||||
sale_tax.save
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#new taxable amount is standard rule for step by step
|
||||||
|
if shop.calc_tax_order
|
||||||
|
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||||
|
end
|
||||||
|
|
||||||
|
sale_tax.inclusive = tax.inclusive
|
||||||
|
sale_tax.save
|
||||||
end
|
end
|
||||||
self.tax_type = tax_incl_exec
|
self.tax_type = tax_incl_exec
|
||||||
self.total_tax = total_tax_amount
|
self.total_tax = total_tax_amount
|
||||||
@@ -727,42 +636,16 @@ class Sale < ApplicationRecord
|
|||||||
shop_details = Shop.first
|
shop_details = Shop.first
|
||||||
# rounding adjustment
|
# rounding adjustment
|
||||||
if shop_details.is_rounding_adj
|
if shop_details.is_rounding_adj
|
||||||
a = self.grand_total % 25 # Modulus
|
new_total = Sale.get_rounding_adjustment(self.grand_total)
|
||||||
b = self.grand_total / 25 # Division
|
self.rounding_adjustment = new_total - self.grand_total
|
||||||
#not calculate rounding if modulus is 0 and division is even
|
self.old_grand_total = self.grand_total
|
||||||
#calculate rounding if modulus is zero or not zero and division are not even
|
self.grand_total = new_total
|
||||||
if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
|
||||||
new_total = Sale.get_rounding_adjustment(self.grand_total)
|
|
||||||
self.rounding_adjustment = new_total - self.grand_total
|
|
||||||
else
|
|
||||||
self.rounding_adjustment = 0.00
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
self.rounding_adjustment = 0.00
|
self.rounding_adjustment = 0.00
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def compute_adjust_rounding(grand_total)
|
|
||||||
shop_details = Shop.first
|
|
||||||
# rounding adjustment
|
|
||||||
if shop_details.is_rounding_adj
|
|
||||||
a = grand_total % 25 # Modulus
|
|
||||||
b = grand_total / 25 # Division
|
|
||||||
#not calculate rounding if modulus is 0 and division is even
|
|
||||||
#calculate rounding if modulus is zero or not zero and division are not even
|
|
||||||
if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
|
||||||
new_total = Sale.get_rounding_adjustment(grand_total)
|
|
||||||
rounding_adjustment = new_total - grand_total
|
|
||||||
else
|
|
||||||
rounding_adjustment = 0.00
|
|
||||||
end
|
|
||||||
else
|
|
||||||
rounding_adjustment = 0.00
|
|
||||||
end
|
|
||||||
return rounding_adjustment
|
|
||||||
end
|
|
||||||
|
|
||||||
#Generate new Receipt No when it is not assigned
|
#Generate new Receipt No when it is not assigned
|
||||||
def generate_receipt_no
|
def generate_receipt_no
|
||||||
#shop_code and client_code
|
#shop_code and client_code
|
||||||
@@ -857,115 +740,69 @@ class Sale < ApplicationRecord
|
|||||||
# if get_rounded_amt == true
|
# if get_rounded_amt == true
|
||||||
value = 0
|
value = 0
|
||||||
|
|
||||||
num = num.to_f.round
|
# num = num.to_f.round
|
||||||
get_last_no = num.to_s.last(2).to_f
|
mod = num % 50
|
||||||
if get_last_no.between?(0,25)
|
if mod > 0 && mod <= 25
|
||||||
## down to 0
|
num -= mod
|
||||||
num -= get_last_no
|
elsif mod > 25
|
||||||
else
|
num += 50 - mod
|
||||||
if get_last_no.between?(26,50)
|
|
||||||
## up to 50
|
|
||||||
value = 50 - get_last_no.to_f
|
|
||||||
num += value
|
|
||||||
puts 'up to 50'
|
|
||||||
else
|
|
||||||
if get_last_no.between?(51, 75)
|
|
||||||
## down to 50
|
|
||||||
value = get_last_no.to_f - 50
|
|
||||||
num -= value
|
|
||||||
puts 'down to 50'
|
|
||||||
else
|
|
||||||
## up to 100
|
|
||||||
value = 100 - get_last_no.to_f
|
|
||||||
num += value
|
|
||||||
puts 'up to 100'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
# end
|
|
||||||
return num
|
return num
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
def self.daily_sales_list(from,to)
|
def self.daily_sales_list(from,to)
|
||||||
sub_query = "SELECT (CASE WHEN SUM(sale_payments.payment_amount) > 0 THEN
|
sales = select("
|
||||||
(SUM(sale_payments.payment_amount) + SUM(sale_payments.outstanding_amount)) ELSE 0 END)
|
sales.*,
|
||||||
FROM sale_payments
|
SUM(case when (sale_payments.payment_method='KBZPay') then sale_payments.payment_amount else 0 end) as kbzpay_amount,
|
||||||
INNER JOIN sale_audits sa ON SUBSTRING_INDEX(sa.remark,'||',1)=sale_payments.sale_payment_id
|
SUM(case when (sale_payments.payment_method='mpu') then sale_payments.payment_amount else 0 end) as mpu_amount,
|
||||||
INNER JOIN sales s ON s.sale_id=sa.sale_id
|
SUM(case when (sale_payments.payment_method='master') then sale_payments.payment_amount else 0 end) as master_amount,
|
||||||
WHERE s.sale_status='completed'
|
SUM(case when (sale_payments.payment_method='visa') then sale_payments.payment_amount else 0 end) as visa_amount,
|
||||||
AND DATE_FORMAT(CONVERT_TZ(s.receipt_date,'+00:00','+06:30'),'%Y-%m-%d') = DATE_FORMAT(CONVERT_TZ(sales.receipt_date,'+00:00','+06:30'),'%Y-%m-%d')"
|
SUM(case when (sale_payments.payment_method='jcb') then sale_payments.payment_amount else 0 end) as jcb_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='paypar') then sale_payments.payment_amount else 0 end) as paypar_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='unionpay') then sale_payments.payment_amount else 0 end) as unionpay_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='alipay') then sale_payments.payment_amount else 0 end) as alipay_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='paymal') then sale_payments.payment_amount else 0 end) as paymal_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='dinga') then sale_payments.payment_amount else 0 end) as dinga_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='JunctionPay') then sale_payments.payment_amount else 0 end) as junctionpay_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='cash') then sale_payments.payment_amount else 0 end) as cash_amount,
|
||||||
|
CASE WHEN SUM(case when sale_payments.payment_method not in('creditnote') then sale_payments.payment_amount end) < sales.grand_total
|
||||||
|
THEN sales.grand_total - SUM(case when sale_payments.payment_method not in('creditnote') then sale_payments.payment_amount end)
|
||||||
|
ELSE 0 END as credit_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='giftvoucher') then sale_payments.payment_amount else 0 end) as giftvoucher_amount,
|
||||||
|
SUM(case when (sale_payments.payment_method='foc') then sale_payments.payment_amount else 0 end) as foc_amount")
|
||||||
|
.joins("LEFT JOIN sale_payments on sales.sale_status != 'void' AND sale_payments.sale_id = sales.sale_id AND DATE(CONVERT_TZ(sale_payments.created_at,'+00:00','+06:30')) = DATE(CONVERT_TZ(sales.receipt_date,'+00:00','+06:30'))")
|
||||||
|
.where("(sale_status = ? OR sale_status = ?) AND sales.receipt_date between ? AND ? ", 'completed', 'void', from, to)
|
||||||
|
.group("sale_id").to_sql
|
||||||
|
|
||||||
payments_total = Sale.select("CAST((CONVERT_TZ(sales.receipt_date,'+00:00','+06:30')) AS DATE) as sale_date,
|
daily_total = connection.select_all("SELECT
|
||||||
SUM(case when (sale_payments.payment_method='KBZPay') then sale_payments.payment_amount else 0 end) as kbzpay_amount,
|
IFNULL(SUM(case when (sale_status='completed') then grand_total else 0 end),0) as grand_total,
|
||||||
SUM(case when (sale_payments.payment_method='mpu') then sale_payments.payment_amount else 0 end) as mpu_amount,
|
IFNULL(SUM(case when (sale_status='completed') then old_grand_total else 0 end),0) as old_grand_total,
|
||||||
SUM(case when (sale_payments.payment_method='master') then sale_payments.payment_amount else 0 end) as master_amount,
|
IFNULL(SUM(case when (sale_status='completed') then total_discount else 0 end),0) as total_discount,
|
||||||
SUM(case when (sale_payments.payment_method='visa') then sale_payments.payment_amount else 0 end) as visa_amount,
|
IFNULL(SUM(case when (sale_status='completed') then amount_changed else 0 end),0) as total_change_amount,
|
||||||
SUM(case when (sale_payments.payment_method='jcb') then sale_payments.payment_amount else 0 end) as jcb_amount,
|
IFNULL(SUM(case when (sale_status='void') then grand_total else 0 end),0) as void_amount,
|
||||||
SUM(case when (sale_payments.payment_method='paypar') then sale_payments.payment_amount else 0 end) as paypar_amount,
|
IFNULL(SUM(case when (sale_status='completed') then rounding_adjustment else 0 end),0) as rounding_adj,
|
||||||
SUM(case when (sale_payments.payment_method='unionpay') then sale_payments.payment_amount else 0 end) as unionpay_amount,
|
CAST((CONVERT_TZ(receipt_date,'+00:00','+06:30')) AS DATE) as sale_date,
|
||||||
SUM(case when (sale_payments.payment_method='alipay') then sale_payments.payment_amount else 0 end) as alipay_amount,
|
SUM(kbzpay_amount) as kbzpay_amount,
|
||||||
SUM(case when (sale_payments.payment_method='paymal') then sale_payments.payment_amount else 0 end) as paymal_amount,
|
SUM(mpu_amount) as mpu_amount,
|
||||||
SUM(case when (sale_payments.payment_method='dinga') then sale_payments.payment_amount else 0 end) as dinga_amount,
|
SUM(master_amount) as master_amount,
|
||||||
SUM(case when (sale_payments.payment_method='JunctionPay') then sale_payments.payment_amount else 0 end) as junctionpay_amount,
|
SUM(visa_amount) as visa_amount,
|
||||||
SUM(case when (sale_payments.payment_method='cash') then sale_payments.payment_amount else 0 end) as cash_amount,
|
SUM(jcb_amount) as jcb_amount,
|
||||||
(CASE WHEN (SUM(case when (sale_payments.payment_method='creditnote') then sale_payments.payment_amount else 0 end)) > 0 THEN (SUM(case when (sale_payments.payment_method='creditnote') then sale_payments.payment_amount else 0 end) - (#{sub_query})) ELSE 0 END) as credit_amount,
|
SUM(paypar_amount) as paypar_amount,
|
||||||
SUM(case when (sale_payments.payment_method='giftvoucher') then sale_payments.payment_amount else 0 end) as giftvoucher_amount,
|
SUM(unionpay_amount) as unionpay_amount,
|
||||||
SUM(case when (sale_payments.payment_method='foc') then sale_payments.payment_amount else 0 end) as foc_amount")
|
SUM(alipay_amount) as alipay_amount,
|
||||||
.joins(" join sale_payments on sale_payments.sale_id = sales.sale_id")
|
SUM(paymal_amount) as paymal_amount,
|
||||||
.where("sale_status = ? AND sales.receipt_date between ? and ? ", 'completed', from, to)
|
SUM(dinga_amount) as dinga_amount,
|
||||||
.group("DATE_FORMAT((CONVERT_TZ(sales.receipt_date,'+00:00','+06:30')),'%Y-%m-%d')")
|
SUM(junctionpay_amount) as junctionpay_amount,
|
||||||
|
SUM(cash_amount) as cash_amount,
|
||||||
|
SUM(credit_amount) as credit_amount,
|
||||||
|
SUM(giftvoucher_amount) as giftvoucher_amount,
|
||||||
|
SUM(foc_amount) as foc_amount
|
||||||
|
FROM (
|
||||||
|
#{sales}
|
||||||
|
) as s
|
||||||
|
GROUP BY DATE(CONVERT_TZ(receipt_date,'+00:00','+06:30'))").to_hash.map(&:symbolize_keys)
|
||||||
|
|
||||||
daily_total = Array.new
|
return daily_total
|
||||||
|
|
||||||
payments_total.each do |pay|
|
|
||||||
sale_date = pay.sale_date
|
|
||||||
diff_time = payments_total.first.sale_date.beginning_of_day.utc - from
|
|
||||||
diff = diff_time % 86400
|
|
||||||
from_date = sale_date.beginning_of_day.utc - diff
|
|
||||||
to_date = sale_date.end_of_day.utc - diff
|
|
||||||
|
|
||||||
total_sale = Sale.select("IFNULL(SUM(case when (sale_status='completed') then grand_total else 0 end),0) as grand_total,
|
|
||||||
IFNULL(SUM(case when (sale_status='completed') then 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='completed') then amount_changed else 0 end),0) as total_change_amount,
|
|
||||||
IFNULL(SUM(case when (sale_status='void') then grand_total else 0 end),0) as void_amount,
|
|
||||||
IFNULL(SUM(case when (sale_status='completed') then rounding_adjustment else 0 end),0) as rounding_adj")
|
|
||||||
.where("(sale_status = ? OR sale_status = ?) AND receipt_date between ? and ? AND total_amount != 0", 'completed', 'void', from_date, to_date)
|
|
||||||
|
|
||||||
total_sale.each do |sale|
|
|
||||||
grand_total = sale.grand_total
|
|
||||||
old_grand_total = sale.old_grand_total
|
|
||||||
total_discount = sale.total_discount
|
|
||||||
void_amount = sale.void_amount
|
|
||||||
total_change_amount = sale.total_change_amount
|
|
||||||
total = {:sale_date => pay.sale_date,
|
|
||||||
:mpu_amount => pay.mpu_amount,
|
|
||||||
:master_amount => pay.master_amount,
|
|
||||||
:visa_amount => pay.visa_amount,
|
|
||||||
:jcb_amount => pay.jcb_amount,
|
|
||||||
:paypar_amount => pay.paypar_amount,
|
|
||||||
:unionpay_amount => pay.unionpay_amount,
|
|
||||||
:alipay_amount => pay.alipay_amount,
|
|
||||||
:kbzpay_amount => pay.kbzpay_amount,
|
|
||||||
:paymal_amount => pay.paymal_amount,
|
|
||||||
:dinga_amount => pay.dinga_amount,
|
|
||||||
:junctionpay_amount => pay.junctionpay_amount,
|
|
||||||
:cash_amount => pay.cash_amount,
|
|
||||||
:credit_amount => pay.credit_amount,
|
|
||||||
:foc_amount => pay.foc_amount,
|
|
||||||
:giftvoucher_amount => pay.giftvoucher_amount,
|
|
||||||
:total_discount => total_discount,
|
|
||||||
:total_change_amount => total_change_amount,
|
|
||||||
:grand_total => grand_total,
|
|
||||||
:old_grand_total => old_grand_total,
|
|
||||||
:void_amount => void_amount,
|
|
||||||
:rounding_adj => sale.rounding_adj}
|
|
||||||
daily_total.push(total)
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
return daily_total
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.get_by_range_by_saleitems(from,to,status,report_type)
|
def self.get_by_range_by_saleitems(from,to,status,report_type)
|
||||||
@@ -1267,73 +1104,64 @@ def self.get_shift_sales_by_receipt_no_detail(shift_sale_range,shift,from,to,pay
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter,order_source)
|
def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter,order_source)
|
||||||
sub_query = "SELECT (CASE WHEN SUM(payment_amount) > 0
|
order_sources = Order.select("sale_orders.sale_id, orders.source")
|
||||||
THEN DATE_FORMAT(CONVERT_TZ(sale_payments.created_at,'+00:00','+06:30'),'%d %b %y %h:%i%p') ELSE '-' END)
|
.joins(:sale_orders).to_sql
|
||||||
FROM `sale_payments`
|
|
||||||
INNER JOIN sale_audits ON SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id
|
|
||||||
WHERE sale_audits.sale_id = s.sale_id"
|
|
||||||
|
|
||||||
sub_query1 = "SELECT (CASE WHEN SUM(payment_amount) > 0 THEN SUM(payment_amount) -
|
credit_payments = SalePayment.select("
|
||||||
(SUM(payment_amount) - (SELECT SUM(payment_amount) FROM sale_payments WHERE payment_method='creditnote' AND sale_id=s.sale_id)) ELSE 0 END)
|
sales.sale_id,
|
||||||
FROM `sale_payments`
|
DATE_FORMAT(CONVERT_TZ(sale_payments.created_at,'+00:00','+06:30'),'%d %b %y %h:%i%p') as credit_payment_receipt_date,
|
||||||
INNER JOIN sale_audits ON SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id
|
sale_payments.payment_amount as credit_payment,
|
||||||
WHERE sale_audits.sale_id = s.sale_id"
|
employees.name as credit_payment_cashier_name,
|
||||||
|
CONCAT(DATE_FORMAT(CONVERT_TZ(shift_started_at,'+00:00','+06:30'),'%d %b %y %h:%i%p'),' - ',DATE_FORMAT(CONVERT_TZ(shift_closed_at,'+00:00','+06:30'),'%d %b %y %h:%i%p')) as credit_payment_shift_name")
|
||||||
|
.joins("JOIN sales ON sales.sale_id = sale_payments.sale_id")
|
||||||
|
.joins("JOIN sale_audits ON sale_audits.sale_id = sales.sale_id AND SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id")
|
||||||
|
.joins("JOIN shift_sales ON shift_sales.id = sales.shift_sale_id")
|
||||||
|
.joins("JOIN employees ON employees.id = shift_sales.employee_id").to_sql
|
||||||
|
|
||||||
sub_query2 = "SELECT (CASE WHEN shift_closed_at IS NOT NULL AND credit_payment > 0
|
credits = SalePayment.select("
|
||||||
THEN CONCAT(DATE_FORMAT(CONVERT_TZ(shift_started_at,'+00:00','+06:30'),'%d %b %y %h:%i%p'),' - ',DATE_FORMAT(CONVERT_TZ(shift_closed_at,'+00:00','+06:30'),'%d %b %y %h:%i%p'))
|
sale_payments.sale_payment_id,
|
||||||
ELSE '-' END)
|
sale_payments.payment_method,
|
||||||
FROM shift_sales
|
sale_payments.payment_amount,
|
||||||
WHERE shift_sales.id = s.shift_sale_id"
|
sale_payments.payment_status,
|
||||||
|
sales.sale_id,
|
||||||
|
sales.receipt_no,
|
||||||
|
sales.receipt_date as sale_date,
|
||||||
|
order_sources.source as order_source,
|
||||||
|
sales.cashier_name,
|
||||||
|
customers.name as customer_name,
|
||||||
|
IFNULL(credit_payments.credit_payment_receipt_date, '-') as credit_payment_receipt_date,
|
||||||
|
IFNULL(credit_payments.credit_payment, 0) as credit_payment,
|
||||||
|
IFNULL(credit_payments.credit_payment_cashier_name, '-') as credit_payment_cashier_name,
|
||||||
|
IFNULL(credit_payments.credit_payment_shift_name, '-') as credit_payment_shift_name")
|
||||||
|
.joins("JOIN sales ON sales.sale_id = sale_payments.sale_id")
|
||||||
|
.joins("JOIN shift_sales ON shift_sales.id = sales.shift_sale_id")
|
||||||
|
.joins("JOIN customers ON customers.customer_id = sales.customer_id")
|
||||||
|
.joins("JOIN (#{order_sources}) order_sources ON order_sources.sale_id = sales.sale_id")
|
||||||
|
.joins("LEFT JOIN (#{credit_payments}) credit_payments ON credit_payments.sale_id = sales.sale_id")
|
||||||
|
.where("sale_payments.payment_method= ? AND sales.sale_status = ?", 'creditnote', 'completed')
|
||||||
|
|
||||||
sub_query3 = "SELECT (CASE WHEN shift_closed_at IS NOT NULL OR shift_closed_at IS NULL AND credit_payment > 0
|
if order_source.present?
|
||||||
THEN employees.name ELSE '-' END)
|
|
||||||
FROM shift_sales
|
|
||||||
INNER JOIN employees ON employees.id=shift_sales.employee_id
|
|
||||||
WHERE shift_sales.id = s.shift_sale_id"
|
|
||||||
|
|
||||||
filter_check = ""
|
|
||||||
if filter == 'paid'
|
|
||||||
filter_check = " AND (SELECT (CASE WHEN SUM(payment_amount) > 0 THEN SUM(payment_amount) ELSE 0 END)
|
|
||||||
FROM `sale_payments`
|
|
||||||
INNER JOIN sale_audits ON SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id
|
|
||||||
WHERE sale_audits.sale_id = s.sale_id) > 0"
|
|
||||||
elsif filter == 'unpaid'
|
|
||||||
filter_check = " AND (SELECT (CASE WHEN SUM(payment_amount) > 0 THEN SUM(payment_amount) ELSE 0 END)
|
|
||||||
FROM `sale_payments`
|
|
||||||
INNER JOIN sale_audits ON SUBSTRING_INDEX(sale_audits.remark,'||',1)=sale_payments.sale_payment_id
|
|
||||||
WHERE sale_audits.sale_id = s.sale_id) = 0"
|
|
||||||
end
|
|
||||||
order_source_query = "(select orders.source FROM orders JOIN sale_orders so ON so.order_id=orders.order_id WHERE so.sale_id=s.sale_id GROUP BY so.sale_id)"
|
|
||||||
|
|
||||||
if order_source.blank?
|
|
||||||
source = ""
|
|
||||||
else
|
|
||||||
if order_source == "cashier"
|
if order_source == "cashier"
|
||||||
source = "and #{order_source_query}='cashier' or #{order_source_query}='emenu'"
|
credits = credits.where("order_sources.source IN (?)", ['cashier', 'emenu'])
|
||||||
else
|
else
|
||||||
source = "and #{order_source_query}='#{order_source}'"
|
credits = credits.where("order_sources.source = ?", order_source)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
query = SalePayment.select("s.receipt_no, sale_payments.*,
|
|
||||||
SUM(sale_payments.payment_amount) as payment_amount,
|
if filter == 'paid'
|
||||||
s.receipt_date as sale_date,
|
credits = credits.where("credit_payment IS NOT NULL")
|
||||||
#{order_source_query} as order_source,
|
elsif filter == 'unpaid'
|
||||||
s.cashier_name as cashier_name,
|
credits = credits.where("credit_payment IS NULL")
|
||||||
(#{sub_query}) as credit_payment_receipt_date,
|
end
|
||||||
(#{sub_query1}) as credit_payment,
|
|
||||||
(#{sub_query3}) as credit_payment_cashier_name,
|
|
||||||
(#{sub_query2}) as credit_payment_shift_name")
|
|
||||||
.joins("INNER JOIN sales s ON s.sale_id = sale_payments.sale_id")
|
|
||||||
.joins("INNER JOIN shift_sales ss ON ss.id = s.shift_sale_id")
|
|
||||||
|
|
||||||
if shift.present?
|
if shift.present?
|
||||||
query = query.where("sale_payments.payment_method= 'creditnote' and s.sale_status = 'completed' #{filter_check} and s.shift_sale_id in (?) #{source}",shift.to_a)
|
credits = credits.where("sales.shift_sale_id in (?)",shift.to_a)
|
||||||
elsif shift_sale_range.present?
|
elsif shift_sale_range.present?
|
||||||
query = query.where("sale_payments.payment_method='creditnote' and s.sale_status = 'completed' #{filter_check} and s.shift_sale_id in (?) #{source}",shift_sale_range.to_a)
|
credits = credits.where("sales.shift_sale_id in (?)",shift_sale_range.to_a)
|
||||||
else
|
else
|
||||||
query = query.where("sale_payments.payment_method='creditnote' and s.sale_status = 'completed' #{filter_check} and s.receipt_date between ? and ? #{source}",from,to)
|
credits = credits.where("sales.receipt_date between ? and ?",from,to)
|
||||||
end
|
end
|
||||||
query = query.group("s.sale_id")
|
credits = credits.group("sales.sale_id")
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.get_void_sale(shift,from,to)
|
def self.get_void_sale(shift,from,to)
|
||||||
@@ -2646,20 +2474,15 @@ def self.get_sale_data_for_other_payment_credit(sale_id)
|
|||||||
end
|
end
|
||||||
|
|
||||||
def unique_tax_profiles(order_source, customer_id)
|
def unique_tax_profiles(order_source, customer_id)
|
||||||
tax_data = TaxProfile.where("group_type='#{order_source}'").pluck(:id)
|
tax_data = TaxProfile
|
||||||
customer_tax_profiles = Customer.find(customer_id).tax_profiles
|
.where(group_type: order_source)
|
||||||
|
|
||||||
arr_data = []
|
customer_tax_profiles = Customer.select(:tax_profiles).where(customer_id: customer_id).first
|
||||||
if !customer_tax_profiles.empty?
|
if customer_tax_profiles.present?
|
||||||
customer_tax_profiles.each do |value1|
|
tax_data = tax_data.where(id: customer_tax_profiles.tax_profiles)
|
||||||
if tax_data.include? value1.to_i
|
|
||||||
arr_data.push(value1.to_i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return arr_data
|
|
||||||
else
|
|
||||||
return tax_data
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return tax_data
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.top_bottom(today,shift=nil,from=nil,to=nil,from_time=nil,to_time=nil)
|
def self.top_bottom(today,shift=nil,from=nil,to=nil,from_time=nil,to_time=nil)
|
||||||
@@ -2861,7 +2684,7 @@ def self.get_hourly_item_query(type)
|
|||||||
"i.status as status_type,i.remark as remark,"+
|
"i.status as status_type,i.remark as remark,"+
|
||||||
"i.unit_price,i.price as price,i.product_name as product_name, " +
|
"i.unit_price,i.price as price,i.product_name as product_name, " +
|
||||||
"i.menu_category_name,i.menu_category_code as menu_category_id, " +
|
"i.menu_category_name,i.menu_category_code as menu_category_id, " +
|
||||||
|
|
||||||
"concat(hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')), ':00 - ', hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')) + 1, ':00') as date_format," +
|
"concat(hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')), ':00 - ', hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')) + 1, ':00') as date_format," +
|
||||||
"hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')) as hour")
|
"hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')) as hour")
|
||||||
|
|
||||||
@@ -2885,6 +2708,139 @@ def grand_total_round
|
|||||||
self.grand_total =self.grand_total.round(print_settings.precision.to_i)
|
self.grand_total =self.grand_total.round(print_settings.precision.to_i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Loader Service SFTP Start
|
||||||
|
def self.get_load_sale_range(load_time_start,load_time_end)
|
||||||
|
query = Sale.select("sales.sale_id,
|
||||||
|
CONVERT(receipt_date, TIME) as transaction_time,
|
||||||
|
CONVERT(receipt_date, DATE) as transaction_date,
|
||||||
|
receipt_no as transaction_no,
|
||||||
|
SUM(i.qty) as item_no,
|
||||||
|
'MMK' as currency_salesamount,
|
||||||
|
IFNULL((total_amount-total_discount)-((total_amount-total_discount)/21),0) as total_salesamount,
|
||||||
|
IFNULL(amount_changed,0) as change_amt,
|
||||||
|
IFNULL(total_amount-total_discount,0) as grand_salesamount,
|
||||||
|
'5' as tax_percent,
|
||||||
|
'MMK' as currency_payment,
|
||||||
|
IFNULL(amount_received,0) as paymentamount,
|
||||||
|
sp.payment_amount as payment_method,
|
||||||
|
CASE
|
||||||
|
WHEN sales.sale_status='completed' THEN 'Sales'
|
||||||
|
WHEN sales.sale_status='void' THEN 'Void'
|
||||||
|
END as sale_type,
|
||||||
|
sales.updated_at as load_time")
|
||||||
|
.joins("JOIN sale_items i ON i.sale_id = sales.sale_id" +
|
||||||
|
" JOIN sale_payments sp ON sp.sale_id = sales.sale_id")
|
||||||
|
.where("(sale_status=? OR sale_status=?) AND sp.payment_method !=? AND sales.updated_at between ? AND ?", 'completed', 'void', 'foc', load_time_start, load_time_end)
|
||||||
|
.group("receipt_no")
|
||||||
|
.order("receipt_date")
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.get_tender_sale_data(transaction_date)
|
||||||
|
query = Sale.select("sales.receipt_no as check_num,
|
||||||
|
DATE_FORMAT(sales.receipt_date, '%d %b %Y') as business_date,
|
||||||
|
sales.receipt_date as transaction_date,
|
||||||
|
'36017' as item_id,
|
||||||
|
'Cash Received' as item_name,
|
||||||
|
'1' as qty,
|
||||||
|
'Tender' as transaction_type,
|
||||||
|
'0' as sales,
|
||||||
|
CASE WHEN sales.sale_status = 'void' THEN '1' ELSE '0' END as is_void
|
||||||
|
")
|
||||||
|
.where("DATE(sales.receipt_date)=? AND sales.sale_status != ?", transaction_date, :void)
|
||||||
|
.order("sales.receipt_no")
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.get_daily_sale_data(transaction_date)
|
||||||
|
query = Sale.connection.select_all("SELECT s.receipt_date as business_date,
|
||||||
|
(SUM(s.grand_total)+SUM(s.total_discount)) as gross_sales,
|
||||||
|
SUM(s.total_discount) as discount,
|
||||||
|
SUM(s.grand_total) as sales,
|
||||||
|
SUM(s.grand_total)/21 as tax,
|
||||||
|
0 as service_charge,
|
||||||
|
SUM(s.grand_total) - (SUM(s.grand_total)/21) as net_sales,
|
||||||
|
SUM(s.credit_amount) as credit_amount,
|
||||||
|
SUM(s.voucher_sales) as voucher_sales,
|
||||||
|
0 as staff_meal_amt,
|
||||||
|
0 as round_amt,
|
||||||
|
0 as raw_wastage_amt,
|
||||||
|
0 as semi_wastage_amt,
|
||||||
|
CASE WHEN s.sale_status='waste' THEN SUM(s.total_amount) ELSE 0 END as wastage_amt,
|
||||||
|
CASE WHEN s.sale_status='spoile' THEN SUM(s.total_amount) ELSE 0 END as spoilage_amt,
|
||||||
|
0 as sampling_amt,
|
||||||
|
0 as other_amt,
|
||||||
|
SUM(s.qty) as total_qty,
|
||||||
|
(SELECT COUNT(sales.sale_id) FROM sales WHERE DATE(sales.receipt_date)='#{transaction_date}') as total_transaction,
|
||||||
|
(SELECT COUNT(sales.sale_id) FROM sales WHERE (sales.sale_status='completed' OR sales.sale_status='void') AND DATE(sales.receipt_date)='#{transaction_date}') as valid_transaction_count,
|
||||||
|
(SELECT COUNT(sales.sale_id) FROM sales WHERE (sales.sale_status IN('new','pending',null)) AND DATE(sales.receipt_date)='#{transaction_date}') as invalid_transaction_count,
|
||||||
|
0 as overing_transaction_count,
|
||||||
|
0 as cancle_transaction_count,
|
||||||
|
0 as no_of_pax,
|
||||||
|
0 as no_of_adult,
|
||||||
|
0 as no_of_child
|
||||||
|
FROM (
|
||||||
|
SELECT s.*, SUM(qty) as qty
|
||||||
|
FROM (
|
||||||
|
SELECT sales.*,
|
||||||
|
SUM(CASE WHEN sp.payment_method IN('mpu','master','visa','jcb','unionpay','alipay') THEN sp.payment_amount ELSE 0 END) as credit_amount,
|
||||||
|
SUM(case when (sp.payment_method='giftvoucher') then sp.payment_amount else 0 end) as voucher_sales
|
||||||
|
FROM sales
|
||||||
|
LEFT JOIN sale_payments sp ON sp.sale_id = sales.sale_id
|
||||||
|
WHERE DATE(sales.receipt_date) = '#{transaction_date}'
|
||||||
|
AND sales.sale_status!='void'
|
||||||
|
AND sales.sale_status='completed'
|
||||||
|
GROUP BY sales.sale_id) AS s
|
||||||
|
LEFT JOIN sale_items si ON si.sale_id = s.sale_id
|
||||||
|
GROUP BY s.sale_id) as s
|
||||||
|
GROUP BY DATE(s.receipt_date)").to_hash
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.get_check_sale_data(transaction_date)
|
||||||
|
sale_receivables_subquery = "SELECT sale_payments.sale_id,
|
||||||
|
CASE WHEN sale_payments.payment_method = 'mpu' OR sale_payments.payment_method = 'visa' OR sale_payments.payment_method = 'master' OR sale_payments.payment_method = 'jcb' OR sale_payments.payment_method = 'paypar' OR sale_payments.payment_method = 'unionpay' OR sale_payments.payment_method = 'alipay' OR sale_payments.payment_method = 'paymal' OR sale_payments.payment_method = 'dinga' OR sale_payments.payment_method = 'JunctionPay' THEN SUM(sale_payments.payment_amount) ELSE SUM(0) END as credit_card_sales,
|
||||||
|
CASE WHEN sale_payments.payment_method = 'giftvoucher' THEN SUM(sale_payments.payment_amount) ELSE SUM(0) END as voucher_sales
|
||||||
|
FROM sale_payments
|
||||||
|
GROUP BY sale_payments.sale_id, sale_payments.payment_method"
|
||||||
|
|
||||||
|
query = Sale.select("
|
||||||
|
sales.receipt_no as check_num,
|
||||||
|
sales.receipt_date as business_date,
|
||||||
|
sales.requested_at as check_open_time,
|
||||||
|
sales.updated_at as check_close_time,
|
||||||
|
(sales.grand_total + sales.total_discount) as gross_sales,
|
||||||
|
sales.total_discount as discount_amt,
|
||||||
|
sales.grand_total as sales,
|
||||||
|
(sales.grand_total/21) as tax_amt,
|
||||||
|
0 as service_charges,
|
||||||
|
(sales.grand_total - (sales.grand_total/21)) as net_sales,
|
||||||
|
receivables.credit_card_sales as credit_card_sales,
|
||||||
|
receivables.voucher_sales as voucher_sales,
|
||||||
|
0 as staff_meal_amt,
|
||||||
|
sales.rounding_adjustment as rounding_amt,
|
||||||
|
CASE WHEN sales.sale_status='waste' THEN sales.total_amount ELSE 0 END as wastage_amt,
|
||||||
|
CASE WHEN sales.sale_status='spoile' THEN sales.total_amount ELSE 0 END as spoilage_amt,
|
||||||
|
0 as sampling_amt,
|
||||||
|
SUM(i.qty) as qty,
|
||||||
|
0 as no_of_pax,
|
||||||
|
0 as no_of_adult,
|
||||||
|
0 as no_of_child,
|
||||||
|
shift_sales.cashier_terminal_id as pos_id,
|
||||||
|
sales.cashier_id as employee_code,
|
||||||
|
employees.name as employee_name,
|
||||||
|
CASE WHEN sales.sale_status='completed' THEN 1 ELSE 0 END is_valid,
|
||||||
|
0 as overing,
|
||||||
|
0 as cancle,
|
||||||
|
CONCAT( employees.name, ' Cash&Go receipt generated and completed.') as remarks")
|
||||||
|
.joins("LEFT JOIN shift_sales ON shift_sales.id = sales.shift_sale_id")
|
||||||
|
.joins("LEFT JOIN sale_items i ON i.sale_id = sales.sale_id")
|
||||||
|
.joins("LEFT JOIN (" + sale_receivables_subquery + ") as receivables ON receivables.sale_id = sales.sale_id")
|
||||||
|
.joins("LEFT JOIN employees ON employees.id = sales.cashier_id")
|
||||||
|
.where("DATE(sales.receipt_date) = ? AND sales.sale_status != ?", transaction_date, :void)
|
||||||
|
.group("sales.receipt_no,sales.sale_status")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Loader Service SFTP End
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def generate_custom_id
|
def generate_custom_id
|
||||||
@@ -2893,6 +2849,20 @@ private
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def round_to_precision
|
||||||
|
if (self.total_amount != self.total_amount_was || self.total_discount != self.total_discount_was || self.total_tax != self.total_tax_was)
|
||||||
|
if (self.total_amount % 1 > 0 || self.total_discount % 1 > 0 || self.total_tax % 1 > 0)
|
||||||
|
precision = PrintSetting.get_precision_delimiter().precision.to_i
|
||||||
|
|
||||||
|
self.total_amount = self.total_amount.round(precision)
|
||||||
|
self.total_discount = self.total_discount.round(precision)
|
||||||
|
self.total_tax = self.total_tax.round(precision)
|
||||||
|
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
||||||
|
end
|
||||||
|
adjust_rounding
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def update_stock_journal
|
def update_stock_journal
|
||||||
if self.sale_status == "void" && self.sale_status_before_last_save != "void"
|
if self.sale_status == "void" && self.sale_status_before_last_save != "void"
|
||||||
self.sale_items.each do |item|
|
self.sale_items.each do |item|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ class SaleItem < ApplicationRecord
|
|||||||
def compute_item
|
def compute_item
|
||||||
end
|
end
|
||||||
|
|
||||||
|
before_validation :round_to_precision
|
||||||
after_update :update_stock_journal
|
after_update :update_stock_journal
|
||||||
|
|
||||||
# Add Sale Items
|
# Add Sale Items
|
||||||
@@ -88,7 +89,7 @@ class SaleItem < ApplicationRecord
|
|||||||
# sale_item.save
|
# sale_item.save
|
||||||
if type != "foc"
|
if type != "foc"
|
||||||
sale = Sale.find(sale_id)
|
sale = Sale.find(sale_id)
|
||||||
sale.compute_by_sale_items(sale.id, sale.sale_items, sale.total_discount)
|
sale.compute_by_sale_items(sale.total_discount)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -231,6 +232,24 @@ class SaleItem < ApplicationRecord
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def round_to_precision
|
||||||
|
unit_price_fraction = self.unit_price % 1
|
||||||
|
price_fraction = self.unit_price % 1
|
||||||
|
# is_dining_charge = self.menu_category_code == 'DingingCharge'
|
||||||
|
|
||||||
|
if self.unit_price != self.unit_price_was || self.price != self.price_was
|
||||||
|
if unit_price_fraction > 0 || price_fraction > 0
|
||||||
|
if ['Discount', 'promotion'].include?(self.status)
|
||||||
|
precision = PrintSetting.get_precision_delimiter().precision.to_i
|
||||||
|
|
||||||
|
self.unit_price = self.unit_price.round(precision)
|
||||||
|
self.price = (self.unit_price * self.qty).round(precision)
|
||||||
|
self.taxable_price = self.price
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def update_stock_journal
|
def update_stock_journal
|
||||||
is_void = self.status == "void" && self.status_before_last_save != "void"
|
is_void = self.status == "void" && self.status_before_last_save != "void"
|
||||||
cancel_void = self.status_before_last_save == "void" && self.status.nil?
|
cancel_void = self.status_before_last_save == "void" && self.status.nil?
|
||||||
@@ -275,4 +294,57 @@ class SaleItem < ApplicationRecord
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Loader Service SFTP Start
|
||||||
|
# Detail Sale Data
|
||||||
|
def self.get_detail_sale_data(transaction_date)
|
||||||
|
query = SaleItem.select("
|
||||||
|
sale_items.sale_item_id as id,
|
||||||
|
sale_items.sale_id as parent_id,
|
||||||
|
s.receipt_no as check_num,
|
||||||
|
s.receipt_date as business_date,
|
||||||
|
s.receipt_date as transaction_date,
|
||||||
|
'' as item_seq,
|
||||||
|
sale_items.menu_category_code as category_code,
|
||||||
|
sale_items.menu_category_name as category_name,
|
||||||
|
'' as sub_category_code,
|
||||||
|
'' as sub_category_name,
|
||||||
|
'' as report_group_code,
|
||||||
|
'' as report_group_name,
|
||||||
|
sale_items.product_code as item_id,
|
||||||
|
sale_items.product_name as item_name,
|
||||||
|
sale_items.qty as qty,
|
||||||
|
CASE
|
||||||
|
WHEN s.sale_status = 'completed' OR s.sale_status = 'void' THEN 'Sales'
|
||||||
|
WHEN s.sale_status = 'waste' THEN 'Waste'
|
||||||
|
WHEN s.sale_status = 'spoile' THEN 'Spoil'
|
||||||
|
END as transaction_type,
|
||||||
|
sale_items.price as gross_sales,
|
||||||
|
'' as discount_code,
|
||||||
|
CASE
|
||||||
|
WHEN i.unit_price IS NOT NULL THEN i.unit_price ELSE 0
|
||||||
|
END as discount_amt,
|
||||||
|
(sale_items.price - (CASE WHEN i.unit_price IS NOT NULL THEN i.unit_price ELSE 0 END)) as sales,
|
||||||
|
((sale_items.price - (CASE WHEN i.unit_price IS NOT NULL THEN i.unit_price ELSE 0 END))/21) as tax_amt,
|
||||||
|
'' as service_charges,
|
||||||
|
((sale_items.price - (CASE WHEN i.unit_price IS NOT NULL THEN i.unit_price ELSE 0 END)) - ((sale_items.price - (CASE WHEN i.unit_price IS NOT NULL THEN i.unit_price ELSE 0 END))/21)) as net_sales,
|
||||||
|
'0' as is_set_item,
|
||||||
|
'0' as is_staff_meal,
|
||||||
|
'0' as is_raw_wastage,
|
||||||
|
'0' as is_semi_wastage,
|
||||||
|
CASE WHEN s.sale_status = 'waste' THEN 1 ELSE 0 END as is_wastage,
|
||||||
|
CASE WHEN s.sale_status = 'spoile' THEN 1 ELSE 0 END as is_spoilage,
|
||||||
|
'0' as is_sampling,
|
||||||
|
'1' as tax_able,
|
||||||
|
CASE
|
||||||
|
WHEN s.sale_status = 'void' THEN 1 ELSE 0
|
||||||
|
END as is_void
|
||||||
|
")
|
||||||
|
.joins("LEFT JOIN sales s ON s.sale_id = sale_items.sale_id")
|
||||||
|
.joins("LEFT JOIN sale_items i ON sale_items.sale_id = i.sale_id AND sale_items.item_instance_code = i.item_instance_code AND i.status = 'Discount' AND sale_items.qty = abs(i.qty)")
|
||||||
|
.where("DATE(s.receipt_date) = ? AND s.sale_status != 'void' AND (sale_items.status NOT IN('Discount', 'void','foc') OR sale_items.status IS NULL)", transaction_date)
|
||||||
|
.order("s.receipt_no")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Loader Service SFTP End
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -6,8 +6,9 @@ class SaleOrder < ApplicationRecord
|
|||||||
|
|
||||||
belongs_to :sale
|
belongs_to :sale
|
||||||
belongs_to :order
|
belongs_to :order
|
||||||
|
has_many :order_items, foreign_key: "order_id", primary_key: "order_id"
|
||||||
|
|
||||||
def create_sale_order(sale_id, order_id)
|
def create_sale_order(sale_id, order_id)
|
||||||
# sale_order = SaleOrder.new
|
# sale_order = SaleOrder.new
|
||||||
self.sale_id = sale_id
|
self.sale_id = sale_id
|
||||||
self.order_id = order_id
|
self.order_id = order_id
|
||||||
@@ -37,6 +38,6 @@ class SaleOrder < ApplicationRecord
|
|||||||
if self.sale_order_id.nil?
|
if self.sale_order_id.nil?
|
||||||
self.sale_order_id = SeedGenerator.generate_id(self.class.name, 'SOI')
|
self.sale_order_id = SeedGenerator.generate_id(self.class.name, 'SOI')
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -419,7 +419,7 @@ class SalePayment < ApplicationRecord
|
|||||||
SaleItem.update_existing_item(item.qty, item, self.sale.sale_id, "foc", item.unit_price, item.price)
|
SaleItem.update_existing_item(item.qty, item, self.sale.sale_id, "foc", item.unit_price, item.price)
|
||||||
end
|
end
|
||||||
sale = Sale.find(self.sale.sale_id)
|
sale = Sale.find(self.sale.sale_id)
|
||||||
sale.compute_by_sale_items(sale.id, sale.sale_items, sale.total_discount,'','','',"foc")
|
sale.compute_by_sale_items(sale.total_discount,'','','',"foc")
|
||||||
|
|
||||||
self.payment_method = "foc"
|
self.payment_method = "foc"
|
||||||
self.payment_amount = self.received_amount
|
self.payment_amount = self.received_amount
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ class SaleTax < ApplicationRecord
|
|||||||
before_create :generate_custom_id
|
before_create :generate_custom_id
|
||||||
belongs_to :sale
|
belongs_to :sale
|
||||||
|
|
||||||
|
before_validation :round_to_precision
|
||||||
|
|
||||||
def self.sync_sale_tax_records(sale_taxes)
|
def self.sync_sale_tax_records(sale_taxes)
|
||||||
if !sale_taxes.nil?
|
if !sale_taxes.nil?
|
||||||
sale_taxes.each do |t|
|
sale_taxes.each do |t|
|
||||||
@@ -38,4 +40,13 @@ class SaleTax < ApplicationRecord
|
|||||||
self.sale_tax_id = SeedGenerator.generate_id(self.class.name, "STI")
|
self.sale_tax_id = SeedGenerator.generate_id(self.class.name, "STI")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def round_to_precision
|
||||||
|
if self.tax_payable_amount != self.tax_payable_amount_was
|
||||||
|
if self.tax_payable_amount % 1 > 0
|
||||||
|
precision = PrintSetting.get_precision_delimiter().precision.to_i
|
||||||
|
self.tax_payable_amount = self.tax_payable_amount.round(precision)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ class OrderItemCustomisePdf < Prawn::Document
|
|||||||
|
|
||||||
# add option
|
# add option
|
||||||
y_position = cursor
|
y_position = cursor
|
||||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
bounding_box([0,y_position], :width => self.item_width) do
|
||||||
text "#{options}", :size => self.item_font_size,:align => :left
|
text "#{options}", :size => self.item_font_size,:align => :left
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ class OrderItemPdf < Prawn::Document
|
|||||||
|
|
||||||
# add option
|
# add option
|
||||||
y_position = cursor
|
y_position = cursor
|
||||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
bounding_box([0,y_position], :width => self.item_width) do
|
||||||
text "#{options}", :size => self.item_font_size,:align => :left
|
text "#{options}", :size => self.item_font_size,:align => :left
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ class OrderItemSlimPdf < Prawn::Document
|
|||||||
|
|
||||||
# add option
|
# add option
|
||||||
y_position = cursor
|
y_position = cursor
|
||||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
bounding_box([0,y_position], :width => self.item_width) do
|
||||||
text "#{options}", :size => self.item_font_size,:align => :left
|
text "#{options}", :size => self.item_font_size,:align => :left
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ class OrderItemStarPdf < Prawn::Document
|
|||||||
|
|
||||||
# add option
|
# add option
|
||||||
y_position = cursor
|
y_position = cursor
|
||||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
bounding_box([0,y_position], :width => self.item_width) do
|
||||||
text "#{options}", :size => self.item_font_size,:align => :left
|
text "#{options}", :size => self.item_font_size,:align => :left
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ class OrderSetItemCustomisePdf < Prawn::Document
|
|||||||
|
|
||||||
# add option
|
# add option
|
||||||
y_position = cursor
|
y_position = cursor
|
||||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
bounding_box([0,y_position], :width => self.item_width) do
|
||||||
text "#{options}", :size => self.item_font_size,:align => :left
|
text "#{options}", :size => self.item_font_size,:align => :left
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ class OrderSetItemPdf < Prawn::Document
|
|||||||
|
|
||||||
# add option
|
# add option
|
||||||
y_position = cursor
|
y_position = cursor
|
||||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
bounding_box([0,y_position], :width => self.item_width) do
|
||||||
text "#{options}", :size => self.item_font_size,:align => :left
|
text "#{options}", :size => self.item_font_size,:align => :left
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
<span class="hidden" id ="table_id" value="<%=@table%>"><%=@table%></span>
|
<span class="hidden" id ="table_id" value="<%=@table%>"><%=@table%></span>
|
||||||
<span class="hidden" id="table_type" value="<%=@table%>"><%=@table%></span>
|
<span class="hidden" id="table_type" value="<%=@table%>"><%=@table%></span>
|
||||||
<%end%>
|
<%end%>
|
||||||
|
|
||||||
<p id="sale-id" class="hidden"><%=@sale_data.sale_id %></p>
|
<p id="sale-id" class="hidden"><%=@sale_data.sale_id %></p>
|
||||||
<p class="m-l-10">Receipt No: <span id="receipt_no"><%=@sale_data.receipt_no rescue ' '%></span></p>
|
<p class="m-l-10">Receipt No: <span id="receipt_no"><%=@sale_data.receipt_no rescue ' '%></span></p>
|
||||||
<!-- <p>Cashier: <span id="cashier"><%=@sale_data.cashier_name rescue ' '%></span></p> -->
|
<!-- <p>Cashier: <span id="cashier"><%=@sale_data.cashier_name rescue ' '%></span></p> -->
|
||||||
@@ -44,24 +44,22 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="order-detail-slimscroll" data-height="160">
|
<div id="order-detail-slimscroll" data-height="160">
|
||||||
<div class="card-text dining">
|
<div class="card-text dining">
|
||||||
<span id="discount_itemsErr" style="color:red;"></span>
|
<span id="discount_itemsErr" style="color:red;"></span>
|
||||||
<table class="table table-default" id="order-items-table">
|
<table class="table table-default" id="order-items-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="item-name">Items</th>
|
<th class="item-name">Items</th>
|
||||||
<th class="item-attr">QTY</th>
|
<th class="item-attr">QTY</th>
|
||||||
<th class="item-attr">Price</th>
|
<th class="item-attr">Price</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<% sub_total = 0 %>
|
<% sub_total = 0 %>
|
||||||
<% @sale_data.sale_items.each do |sale_item| %>
|
<% @sale_data.sale_items.each do |sale_item| %>
|
||||||
<%
|
<% sub_total += sale_item.qty * sale_item.unit_price %>
|
||||||
sub_total += sale_item.qty*sale_item.unit_price
|
<% if sale_item.price > 0 && sale_item.status.blank? %>
|
||||||
if sale_item.price != 0 && sale_item.status != "void" && sale_item.status != "foc"
|
<tr class="item-row item" id=<%= sale_item.sale_item_id %> >
|
||||||
%>
|
|
||||||
<tr class="item-row" id=<%= sale_item.sale_item_id %> >
|
|
||||||
<td style="width:60%; text-align:left">
|
<td style="width:60%; text-align:left">
|
||||||
<span id="item-account-type" class="hidden"><%=sale_item.account_id%></span>
|
<span id="item-account-type" class="hidden"><%=sale_item.account_id%></span>
|
||||||
<span id="item-account-qty" class="hidden"><%=sale_item.qty%></span>
|
<span id="item-account-qty" class="hidden"><%=sale_item.qty%></span>
|
||||||
@@ -74,14 +72,26 @@
|
|||||||
<span id="item-total-price"><%=(sale_item.qty*sale_item.unit_price)%></span>
|
<span id="item-total-price"><%=(sale_item.qty*sale_item.unit_price)%></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<%
|
<% elsif sale_item.price < 0 && sale_item.status == "Discount" %>
|
||||||
end
|
<tr class="item-row discount" id=<%= sale_item.sale_item_id %> >
|
||||||
end
|
<td style="width:60%; text-align:left">
|
||||||
%>
|
<span id="item-account-type" class="hidden"><%=sale_item.account_id%></span>
|
||||||
</tbody>
|
<span id="item-account-qty" class="hidden"><%=sale_item.qty%></span>
|
||||||
</table>
|
<span id="item-name-price"><%=sale_item.product_name%>@<%=sale_item.unit_price%></span>
|
||||||
</div>
|
</td>
|
||||||
</div>
|
<td style="width:20%; text-align:right">
|
||||||
|
<span id="item-qty"><%=sale_item.qty.abs%></span>
|
||||||
|
</td>
|
||||||
|
<td style="width:20%; text-align:right">
|
||||||
|
<span id="item-total-price"><%=(sale_item.qty*sale_item.unit_price)%></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<table class="table" id="order-charges-table" border="0">
|
<table class="table" id="order-charges-table" border="0">
|
||||||
<tr>
|
<tr>
|
||||||
@@ -130,18 +140,18 @@
|
|||||||
<div class="card-block">
|
<div class="card-block">
|
||||||
<div class="card-title">
|
<div class="card-title">
|
||||||
<div class="form-horizontal">
|
<div class="form-horizontal">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" id="discount-amount" name="discount-amount" value="<%= @sale_data.total_discount rescue 0 %>" class="form-control" />
|
<input type="text" id="discount-amount" name="discount-amount" value="0" class="form-control" />
|
||||||
<span id="discount-amountErr" style="color:red;"></span>
|
<span id="discount-amountErr" style="color:red;"></span>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<% @accounts.each do |acc| %>
|
<% @accounts.each do |acc| %>
|
||||||
<button id="account-<%= acc.id %>" class="accounts-type btn bg-default"><%= acc.title %></button>
|
<button id="account-<%= acc.id %>" class="accounts-type btn bg-default"><%= acc.title %></button>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -217,11 +227,11 @@
|
|||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<button id="net" class="btn bg-info fluid action-btn">Nett</button>
|
<button id="net" class="btn bg-info fluid action-btn">Nett</button>
|
||||||
<button id="percentage" class="btn bg-primary fluid action-btn" style="font-size: 12.4px">Percentage</button>
|
<button id="percentage" class="btn bg-primary fluid action-btn" style="font-size: 12.4px">Percentage</button>
|
||||||
<button id="remove-item" class="btn bg-default fluid action-btn">Clear Discount</button>
|
<button id="remove-item" class="btn bg-default fluid action-btn">Clear Discount</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -235,7 +245,7 @@
|
|||||||
<div class="form-horizontal">
|
<div class="form-horizontal">
|
||||||
<div class="p-l-20">
|
<div class="p-l-20">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8 form-group">
|
<div class="col-md-8 form-group">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" id="promo-code" name="promo-code" value="" class="form-control" /></span>
|
<input type="text" id="promo-code" name="promo-code" value="" class="form-control" /></span>
|
||||||
</div>
|
</div>
|
||||||
@@ -243,11 +253,11 @@
|
|||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<button id="" class="btn bg-primary btn-block action-btn">Promo</button>
|
<button id="" class="btn bg-primary btn-block action-btn">Promo</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div> -->
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<!-- Column Three -->
|
<!-- Column Three -->
|
||||||
@@ -259,7 +269,7 @@
|
|||||||
<button id="remove-all" class="btn bg-primary btn-block action-btn">Remove All</button>
|
<button id="remove-all" class="btn bg-primary btn-block action-btn">Remove All</button>
|
||||||
<button id="pay-discount" class="btn bg-primary btn-block action-btn">Enter</button>
|
<button id="pay-discount" class="btn bg-primary btn-block action-btn">Enter</button>
|
||||||
<% if @member_discount%>
|
<% if @member_discount%>
|
||||||
<!-- <hr />
|
<!-- <hr />
|
||||||
<button id="member-discount" class="btn btn-success btn-block action-btn
|
<button id="member-discount" class="btn btn-success btn-block action-btn
|
||||||
<%= @sale_data.customer.membership_id ? " " : "disabled"%>">Member Discount</button> -->
|
<%= @sale_data.customer.membership_id ? " " : "disabled"%>">Member Discount</button> -->
|
||||||
<%end %>
|
<%end %>
|
||||||
@@ -270,6 +280,9 @@
|
|||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var cashier_type = "<%= @cashier_type %>";
|
var cashier_type = "<%= @cashier_type %>";
|
||||||
|
var totalAmount = <%= sub_total %>;
|
||||||
|
var totalDiscount = <%= @sale_data.total_discount %>
|
||||||
|
var precision = <%= precision %>;
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
setHeaderBreadCrumb(_DISCOUNTS_);
|
setHeaderBreadCrumb(_DISCOUNTS_);
|
||||||
/* check webview loaded*/
|
/* check webview loaded*/
|
||||||
@@ -300,10 +313,10 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
case 'num':
|
case 'num':
|
||||||
var input_value = $(this).attr("data-value");
|
var input_value = $(this).attr("data-value");
|
||||||
if (original_value == "0.0"){
|
if (original_value == "0.0"){
|
||||||
$('#discount-amount').val(input_value);
|
$('#discount-amount').val(input_value);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
$('#discount-amount').val(original_value + '' + input_value);
|
$('#discount-amount').val(original_value + '' + input_value);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'add':
|
case 'add':
|
||||||
@@ -313,10 +326,10 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
break;
|
break;
|
||||||
case 'del' :
|
case 'del' :
|
||||||
var discount_text=$('#discount-amount').val();
|
var discount_text=$('#discount-amount').val();
|
||||||
$('#discount-amount').val(discount_text.substr(0,discount_text.length-1));
|
$('#discount-amount').val(discount_text.substr(0,discount_text.length-1));
|
||||||
break;
|
break;
|
||||||
case 'clr':
|
case 'clr':
|
||||||
$('#discount-amount').val("0.0");
|
$('#discount-amount').val("0.0");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
event.handled = true;
|
event.handled = true;
|
||||||
@@ -326,28 +339,12 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Select Sale Item
|
// Select Sale Item
|
||||||
$('.item-row').on('click',function(){
|
$('#order-items-table').on('click', '.item-row', function(){
|
||||||
if($(this).hasClass('selected-item') == true){
|
if($(this).hasClass('selected-item') == true){
|
||||||
$(this).removeClass('selected-item');
|
$(this).removeClass('selected-item');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(parseInt($(this).children().find("#item-account-qty").text()) >0 && parseInt($(this).children().find("#item-total-price").text()) >0){
|
$(this).addClass('selected-item');
|
||||||
|
|
||||||
$(this).addClass('selected-item');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Select discount-item
|
|
||||||
$('#order-items-table tbody').on('click', '.discount-item-row',function(){
|
|
||||||
if($(this).hasClass('selected-item') == true){
|
|
||||||
$(this).removeClass('selected-item');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if(parseInt($(this).children().find("#item-account-qty").text()) >0 && parseInt($(this).children().find("#item-total-price").text()) >0){
|
|
||||||
|
|
||||||
$(this).addClass('selected-item');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -374,7 +371,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Calculate Net Discount for Payment
|
// Calculate Net Discount for Payment
|
||||||
@@ -384,7 +381,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
var discount_value = $('#discount-amount').val();
|
var discount_value = $('#discount-amount').val();
|
||||||
var sub_total = parseFloat($('#order-sub-total').text());
|
var sub_total = parseFloat($('#order-sub-total').text());
|
||||||
var ajax_url = "/origami/" + sale_id + "/discount";
|
var ajax_url = "/origami/" + sale_id + "/discount";
|
||||||
|
|
||||||
if(discount_value!=""){
|
if(discount_value!=""){
|
||||||
if(discount_value > 0){
|
if(discount_value > 0){
|
||||||
if(parseFloat(discount_value) > sub_total){
|
if(parseFloat(discount_value) > sub_total){
|
||||||
@@ -393,7 +390,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
}else{
|
}else{
|
||||||
$("#discount-amountErr").html("");
|
$("#discount-amountErr").html("");
|
||||||
// Selected Items
|
// Selected Items
|
||||||
var sale_items = get_selected_sale_items();
|
var sale_items = get_selected_sale_items();
|
||||||
|
|
||||||
// Selected Account
|
// Selected Account
|
||||||
var account_types = get_selected_account_types();
|
var account_types = get_selected_account_types();
|
||||||
@@ -401,9 +398,9 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
if(sale_items.length == 0 && account_types.length == 0){
|
if(sale_items.length == 0 && account_types.length == 0){
|
||||||
calculate_overall_discount(0, discount_value);
|
calculate_overall_discount(0, discount_value);
|
||||||
}
|
}
|
||||||
else {
|
else if(sale_items.length > 0){
|
||||||
calculate_item_discount(0, discount_value, sale_items, account_types);
|
calculate_item_discount(0, discount_value, sale_items, account_types);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove Selection
|
// Remove Selection
|
||||||
selection_remove();
|
selection_remove();
|
||||||
@@ -414,7 +411,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
}else{
|
}else{
|
||||||
$("#discount-amountErr").html("can't be blank");
|
$("#discount-amountErr").html("can't be blank");
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Calculate Percentage Discount for Payment
|
// Calculate Percentage Discount for Payment
|
||||||
@@ -424,34 +421,46 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
var discount_value = $('#discount-amount').val();
|
var discount_value = $('#discount-amount').val();
|
||||||
var ajax_url = "/origami/" + sale_id + "/discount";
|
var ajax_url = "/origami/" + sale_id + "/discount";
|
||||||
|
|
||||||
// Selected Items
|
if(discount_value!=""){
|
||||||
var sale_items = get_selected_sale_items();
|
if(discount_value > 0){
|
||||||
// Selected Account
|
$("#discount-amountErr").val("");
|
||||||
var account_types = get_selected_account_types();
|
|
||||||
|
// Selected Items
|
||||||
if(sale_items.length == 0 && account_types.length == 0){
|
var sale_items = get_selected_sale_items();
|
||||||
calculate_overall_discount(1, discount_value);
|
// Selected Account
|
||||||
}
|
var account_types = get_selected_account_types();
|
||||||
else {
|
|
||||||
calculate_item_discount(1, discount_value, sale_items, account_types);
|
if(sale_items.length == 0 && account_types.length == 0){
|
||||||
|
calculate_overall_discount(1, discount_value);
|
||||||
|
} else if(sale_items.length > 0){
|
||||||
|
calculate_item_discount(1, discount_value, sale_items, account_types);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$("#discount-amountErr").html("Discount must be greater than 0!");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$("#discount-amountErr").html("can't be blank");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove Selection
|
// Remove Selection
|
||||||
selection_remove();
|
selection_remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Remove selected discount items
|
// Remove selected discount items
|
||||||
$("#remove-item").on('click', function(e){
|
$("#remove-item").on('click', function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
||||||
var total = 0;
|
// var total = 0;
|
||||||
|
|
||||||
$('.discount-item-row.selected-item').each(function(i){
|
$('.item-row.new-discount').each(function(i){
|
||||||
var amount = parseFloat($(this).find('#item-total-price').text());
|
var amount = parseFloat($(this).find('#item-total-price').text());
|
||||||
total = total + Math.abs(amount);
|
totalAmount += Math.abs(amount)
|
||||||
|
// total = total + Math.abs(amount);
|
||||||
$(this).remove();
|
$(this).remove();
|
||||||
});
|
});
|
||||||
$("#order-sub-total").text(origin_sub_total + total);
|
|
||||||
|
$("#order-sub-total").text(totalAmount);
|
||||||
|
$("#order-discount").text(totalDiscount.toFixed(<%= precision.to_i %>));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Pay Discount for Payment
|
// Pay Discount for Payment
|
||||||
@@ -462,10 +471,10 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
}
|
}
|
||||||
$("#loading_wrapper").show();
|
$("#loading_wrapper").show();
|
||||||
var sale_id = $('#sale-id').text();
|
var sale_id = $('#sale-id').text();
|
||||||
var discount_items = JSON.stringify(get_discount_item_rows());
|
var discount_items = JSON.stringify(get_new_discount_item_rows());
|
||||||
var overall_discount = $("#order-discount").text();
|
var overall_discount = $("#order-discount").text();
|
||||||
var sub_total = $('#order-sub-total').text();
|
var sub_total = $('#order-sub-total').text();
|
||||||
var ajax_url = "/origami/" + sale_id + "/discount";
|
var ajax_url = "/origami/" + sale_id + "/discount";
|
||||||
|
|
||||||
var params = { 'cashier_type' : cashier_type,'sale_id': sale_id, 'sub_total': sub_total, 'discount_items': discount_items, 'overall_discount': overall_discount };
|
var params = { 'cashier_type' : cashier_type,'sale_id': sale_id, 'sub_total': sub_total, 'discount_items': discount_items, 'overall_discount': overall_discount };
|
||||||
|
|
||||||
@@ -473,8 +482,8 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
type: "POST",
|
type: "POST",
|
||||||
url: ajax_url,
|
url: ajax_url,
|
||||||
data: params,
|
data: params,
|
||||||
success:function(result){
|
success:function(result){
|
||||||
$("#loading_wrapper").hide();
|
$("#loading_wrapper").hide();
|
||||||
swal({
|
swal({
|
||||||
title: "Information!",
|
title: "Information!",
|
||||||
text: result.status,
|
text: result.status,
|
||||||
@@ -489,7 +498,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
window.location.href = "/origami/room/" + result.table_id
|
window.location.href = "/origami/room/" + result.table_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -500,13 +509,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
var sale_id = $('#sale-id').text();
|
var sale_id = $('#sale-id').text();
|
||||||
var discount_items = [];
|
var discount_items = [];
|
||||||
|
|
||||||
// Selected Items
|
var sale_items = get_selected_discount_items();
|
||||||
var sale_items = get_selected_sale_items();
|
|
||||||
if(sale_items.length == 0){
|
|
||||||
//swal("Information!", "You have no selected item!");
|
|
||||||
swal ( "Oops" , "You have no selected item!" , "error" );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(var i=0;i < sale_items.length;i++){
|
for(var i=0;i < sale_items.length;i++){
|
||||||
if(sale_items[i].price < 0){
|
if(sale_items[i].price < 0){
|
||||||
@@ -514,7 +517,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
swal ("Oops" , "You have no selected item!" , "error" );
|
swal ("Oops" , "You have no selected item!" , "error" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -539,7 +542,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
window.location.href = "/origami/room/" + result.table_id
|
window.location.href = "/origami/room/" + result.table_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -566,7 +569,7 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
window.location.href = "/origami/room/" + result.table_id
|
window.location.href = "/origami/room/" + result.table_id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -575,8 +578,8 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
$("#member-discount").on('click', function(e){
|
$("#member-discount").on('click', function(e){
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
var sale_id = $('#sale-id').text();
|
var sale_id = $('#sale-id').text();
|
||||||
var sub_total = $('#order-sub-total').text();
|
var sub_total = $('#order-sub-total').text();
|
||||||
var ajax_url = "/origami/" + sale_id + "/member_discount";
|
var ajax_url = "/origami/" + sale_id + "/member_discount";
|
||||||
|
|
||||||
// Selected Account
|
// Selected Account
|
||||||
//var account_types = JSON.stringify(get_selected_account_types());
|
//var account_types = JSON.stringify(get_selected_account_types());
|
||||||
@@ -618,96 +621,95 @@ var cashier_type = "<%= @cashier_type %>";
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
});//end member discount
|
});//end member discount
|
||||||
});
|
});
|
||||||
|
|
||||||
/* Remove Selection */
|
/* Remove Selection */
|
||||||
function selection_remove(){
|
function selection_remove(){
|
||||||
$(".item-row").removeClass("selected-item");
|
$(".item-row").removeClass("selected-item");
|
||||||
$(".discount_item_row").removeClass("selected-item");
|
|
||||||
$(".accounts-type").removeClass("selected-account");
|
$(".accounts-type").removeClass("selected-account");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get Item rows but not discount*/
|
/* Get Item rows but not discount*/
|
||||||
function get_item_rows(){
|
function get_item_rows(){
|
||||||
var sale_items = [];
|
var sale_items = [];
|
||||||
$('.item-row').not('.discount-item-row').each(function(i){
|
$('.item-row.item').not('.discount').each(function(i){
|
||||||
var sale_item = {};
|
var sale_item = {};
|
||||||
sale_item.id = $(this).attr('id').substr(0,16);
|
sale_item.id = $(this).attr('id').substr(0,16);
|
||||||
sale_item.name = $(this).find('#item-name-price').text().split('@')[0];
|
sale_item.name = $(this).find('#item-name-price').text().split('@')[0];
|
||||||
sale_item.account_id = $(this).find('#item-account-type').text();
|
sale_item.account_id = $(this).find('#item-account-type').text();
|
||||||
sale_item.price = $(this).find('#item-total-price').text();
|
sale_item.price = $(this).find('#item-total-price').text();
|
||||||
sale_items.push(sale_item);
|
sale_items.push(sale_item);
|
||||||
});
|
});
|
||||||
return sale_items;
|
return sale_items;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get discount Item rows */
|
/* Get discount Item rows */
|
||||||
function get_discount_item_rows(){
|
function get_new_discount_item_rows(){
|
||||||
var sale_items = [];
|
var sale_items = [];
|
||||||
$('.discount-item-row').each(function(i){
|
$('.item-row.new-discount').each(function(i){
|
||||||
var sale_item = {};
|
var sale_item = {};
|
||||||
sale_item.id = $(this).attr('id');
|
sale_item.id = $(this).attr('id');
|
||||||
sale_item.name = $(this).find('#item-name-price').text();
|
sale_item.name = $(this).find('#item-name-price').text();
|
||||||
sale_item.account_id = $(this).find('#item_account_type').text();
|
sale_item.account_id = $(this).find('#item_account_type').text();
|
||||||
sale_item.price = $(this).find('#item-total-price').text();
|
sale_item.price = $(this).find('#item-total-price').text();
|
||||||
sale_items.push(sale_item);
|
sale_items.push(sale_item);
|
||||||
});
|
});
|
||||||
return sale_items;
|
return sale_items;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get discount Item rows */
|
/* Get discount Item rows */
|
||||||
// function get_selected_discount_items(){
|
function get_selected_discount_items(){
|
||||||
// var sale_items = [];
|
var sale_items = [];
|
||||||
// $('.discount-item-row').hasClass('.selected-item').each(function(i){
|
$('.item-row.discount.selected-item').each(function(i){
|
||||||
// var sale_item = {};
|
var sale_item = {};
|
||||||
// sale_item.id = $(this).attr('id');
|
sale_item.id = $(this).attr('id');
|
||||||
// sale_item.name = $(this).find('#item-name-price').text();
|
sale_item.name = $(this).find('#item-name-price').text();
|
||||||
// sale_item.account_id = $(this).find('#item_account_type').text();
|
sale_item.account_id = $(this).find('#item_account_type').text();
|
||||||
// sale_item.price = $(this).find('#item-total-price').text();
|
sale_item.price = $(this).find('#item-total-price').text();
|
||||||
// sale_items.push(sale_item);
|
sale_items.push(sale_item);
|
||||||
// });
|
});
|
||||||
// return sale_items;
|
return sale_items;
|
||||||
// }
|
}
|
||||||
|
|
||||||
/* Get Selected Sale Item's ID and Price */
|
/* Get Selected Sale Item's ID and Price */
|
||||||
function get_selected_sale_items(){
|
function get_selected_sale_items(){
|
||||||
var sale_items = [];
|
var sale_items = [];
|
||||||
$('.item-row.selected-item').each(function(i){
|
$('.item-row.item.selected-item').each(function(i){
|
||||||
var sale_item = {};
|
var sale_item = {};
|
||||||
sale_item.id = $(this).attr('id').substr(0,16);
|
sale_item.id = $(this).attr('id').substr(0,16);
|
||||||
sale_item.name = $(this).find('#item-name-price').text().split('@')[0];
|
sale_item.name = $(this).find('#item-name-price').text().split('@')[0];
|
||||||
sale_item.account_id = $(this).find('#item-account-type').text();
|
sale_item.account_id = $(this).find('#item-account-type').text();
|
||||||
sale_item.price = $(this).find('#item-total-price').text();
|
sale_item.price = $(this).find('#item-total-price').text();
|
||||||
sale_items.push(sale_item);
|
sale_items.push(sale_item);
|
||||||
});
|
});
|
||||||
return sale_items;
|
return sale_items;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get Selected Accounts ID and Price */
|
/* Get Selected Accounts ID and Price */
|
||||||
function get_selected_account_types(){
|
function get_selected_account_types(){
|
||||||
var account_types = [];
|
var account_types = [];
|
||||||
|
|
||||||
$('.selected-account').each(function(i){
|
$('.selected-account').each(function(i){
|
||||||
var account= {};
|
var account= {};
|
||||||
account.id = $(this).attr('id').substr(8);
|
account.id = $(this).attr('id').substr(8);
|
||||||
account.name = $(this).text();
|
account.name = $(this).text();
|
||||||
account_types.push(account);
|
account_types.push(account);
|
||||||
});
|
});
|
||||||
return account_types;
|
return account_types;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate Overall Discount*/
|
/* Calculate Overall Discount*/
|
||||||
function calculate_overall_discount(type, amount){
|
function calculate_overall_discount(type, amount){
|
||||||
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
var origin_sub_total = parseFloat($("#order-sub-total").text()) + parseFloat($("#order-discount").text());
|
||||||
var dis_amount = 0;
|
var dis_amount = 0;
|
||||||
var sub_total = 0;
|
var sub_total = 0;
|
||||||
var total_discount = 0;
|
var total_discount = 0;
|
||||||
|
|
||||||
// For Net Pay
|
// For Net Pay
|
||||||
if(type == 0){
|
if(type == 0){
|
||||||
total_discount = amount;
|
total_discount = Math.round(amount * Math.pow(10, precision)) / Math.pow(10, precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
// For Percentage Pay
|
// For Percentage Pay
|
||||||
@@ -719,34 +721,37 @@ function calculate_overall_discount(type, amount){
|
|||||||
type: "error",
|
type: "error",
|
||||||
confirmButtonText: 'OK',
|
confirmButtonText: 'OK',
|
||||||
confirmButtonColor:"red"
|
confirmButtonColor:"red"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
total_discount = (origin_sub_total * amount)/100;
|
total_discount = Math.round(totalAmount * amount / 100 * Math.pow(10, precision)) / Math.pow(10, precision);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub_total = parseFloat(totalAmount) - parseFloat(total_discount)
|
||||||
|
|
||||||
$("#order-discount").text(parseFloat(total_discount).toFixed(<%= precision.to_i %>));
|
$("#order-discount").text(parseFloat(total_discount).toFixed(<%= precision.to_i %>));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calculate Items Discount*/
|
/* Calculate Items Discount*/
|
||||||
function calculate_item_discount(type, amount, sale_items, account_types){
|
function calculate_item_discount(type, amount, sale_items, account_types){
|
||||||
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
||||||
var dis_amount = 0;
|
var dis_amount = 0;
|
||||||
var sub_total = 0;
|
var sub_total = 0;
|
||||||
var total_discount = 0;
|
var total_discount = 0;
|
||||||
var arrItemName = "";
|
var arrItemName = "";
|
||||||
|
|
||||||
$("#discount_itemsErr").html("");
|
$("#discount_itemsErr").html("");
|
||||||
$("#discount-amountErr").html("");
|
$("#discount-amountErr").html("");
|
||||||
// For Net Pay
|
// For Net Pay
|
||||||
if(origin_sub_total > 0){
|
if(origin_sub_total > 0){
|
||||||
if(type == 0){
|
if(type == 0){
|
||||||
dis_amount = (0 - amount);
|
dis_amount = -Math.round(amount * Math.pow(10, precision)) / Math.pow(10, precision);
|
||||||
if(sale_items.length > 0){
|
if(sale_items.length > 0){
|
||||||
for(var i=0;i < sale_items.length;i++){
|
for(var i=0;i < sale_items.length;i++){
|
||||||
// if(account_types.length > 0){
|
// if(account_types.length > 0){
|
||||||
// for(var j=0; j < account_types.length; j++){
|
// for(var j=0; j < account_types.length; j++){
|
||||||
// if(sale_items[i].account_id == account_types[j].id){
|
// if(sale_items[i].account_id == account_types[j].id){
|
||||||
// // Discount Items
|
// // Discount Items
|
||||||
// var discount_item_row = item_row_template(type, sale_items[i], dis_amount, amount);
|
// var discount_item_row = item_row_template(type, sale_items[i], dis_amount, amount);
|
||||||
// $("#order-items-table tbody").append(discount_item_row);
|
// $("#order-items-table tbody").append(discount_item_row);
|
||||||
@@ -755,20 +760,19 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// else {
|
// else {
|
||||||
if(parseFloat(amount) > parseFloat(sale_items[i].price)){
|
if(parseFloat(amount) > parseFloat(sale_items[i].price)){
|
||||||
arrItemName += ", " + sale_items[i].name;
|
arrItemName += ", " + sale_items[i].name;
|
||||||
}else{
|
}else{
|
||||||
var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
||||||
total_discount = parseFloat(total_discount) + parseFloat(amount);
|
total_discount = parseFloat(total_discount) + parseFloat(amount);
|
||||||
|
|
||||||
if(parseFloat(origin_sub_total) >= parseFloat(total_discount)){
|
if(parseFloat(origin_sub_total) >= parseFloat(total_discount)){
|
||||||
$("#order-items-table tbody").append(discount_item_row);
|
$("#order-items-table tbody").append(discount_item_row);
|
||||||
}else{
|
}else{
|
||||||
total_discount = parseFloat(total_discount) - parseFloat(amount);
|
total_discount = parseFloat(total_discount) - parseFloat(amount);
|
||||||
$("#discount-amountErr").html("Discount is greater than sub total!");
|
$("#discount-amountErr").html("Discount is greater than sub total!");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -782,11 +786,11 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
|||||||
}else{
|
}else{
|
||||||
$("#discount_itemsErr").html("Discount is greater than "+arrItemName+" price");
|
$("#discount_itemsErr").html("Discount is greater than "+arrItemName+" price");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// No Needs For Auto Selected
|
// No Needs For Auto Selected
|
||||||
// if(account_types.length > 0){
|
// if(account_types.length > 0){
|
||||||
// var item_rows=get_item_rows();
|
// var item_rows=get_item_rows();
|
||||||
// if(item_rows.length > 0){
|
// if(item_rows.length > 0){
|
||||||
// for(var k=0; k < item_rows.length; k++){
|
// for(var k=0; k < item_rows.length; k++){
|
||||||
@@ -802,10 +806,12 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
|||||||
// }
|
// }
|
||||||
// else {
|
// else {
|
||||||
// alert("No Items!");
|
// alert("No Items!");
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
sub_total = parseFloat(origin_sub_total) - parseFloat(total_discount);
|
sub_total = parseFloat(origin_sub_total) - parseFloat(total_discount);
|
||||||
|
totalAmount = sub_total
|
||||||
|
$("#order-sub-total").text(parseFloat(sub_total).toFixed(<%= precision.to_i %>));
|
||||||
}
|
}
|
||||||
|
|
||||||
// For Percentage Pay
|
// For Percentage Pay
|
||||||
@@ -817,7 +823,7 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
|||||||
type: "error",
|
type: "error",
|
||||||
confirmButtonText: 'OK',
|
confirmButtonText: 'OK',
|
||||||
confirmButtonColor:"red"
|
confirmButtonColor:"red"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
// Check sale items exists
|
// Check sale items exists
|
||||||
@@ -825,7 +831,7 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
|||||||
for(var i=0;i < sale_items.length;i++){
|
for(var i=0;i < sale_items.length;i++){
|
||||||
// if(account_types.length > 0){
|
// if(account_types.length > 0){
|
||||||
// for(var j=0; j < account_types.length; j++){
|
// for(var j=0; j < account_types.length; j++){
|
||||||
// if(sale_items[i].account_id == account_types[j].id){
|
// if(sale_items[i].account_id == account_types[j].id){
|
||||||
// // Discount Items
|
// // Discount Items
|
||||||
// dis_amount = 0 - ((sale_items[i].price * amount)/100);
|
// dis_amount = 0 - ((sale_items[i].price * amount)/100);
|
||||||
// var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
// var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
||||||
@@ -835,9 +841,9 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// else {
|
// else {
|
||||||
dis_amount = 0 - ((sale_items[i].price * amount)/100);
|
dis_amount = -Math.round(sale_items[i].price * amount / 100 * Math.pow(10, precision)) / Math.pow(10, precision);
|
||||||
var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
||||||
|
|
||||||
total_discount = total_discount + dis_amount;
|
total_discount = total_discount + dis_amount;
|
||||||
if(parseFloat(origin_sub_total) >= parseFloat(total_discount)){
|
if(parseFloat(origin_sub_total) >= parseFloat(total_discount)){
|
||||||
$("#order-items-table tbody").append(discount_item_row);
|
$("#order-items-table tbody").append(discount_item_row);
|
||||||
@@ -848,18 +854,20 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
sub_total = parseFloat(origin_sub_total) + parseFloat(total_discount);
|
sub_total = parseFloat(origin_sub_total) + parseFloat(total_discount);
|
||||||
|
totalAmount = sub_total
|
||||||
|
$("#order-sub-total").text(parseFloat(sub_total).toFixed(<%= precision.to_i %>));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// No Needs For Auto Selected
|
// No Needs For Auto Selected
|
||||||
// Check account types exists
|
// Check account types exists
|
||||||
// if(account_types.length > 0){
|
// if(account_types.length > 0){
|
||||||
// var item_rows=get_item_rows();
|
// var item_rows=get_item_rows();
|
||||||
// console.log(account_types);
|
// console.log(account_types);
|
||||||
// if(item_rows.length > 0){
|
// if(item_rows.length > 0){
|
||||||
// for(var k=0; k < item_rows.length; k++){
|
// for(var k=0; k < item_rows.length; k++){
|
||||||
// for(var j=0; j < account_types.length; j++){
|
// for(var j=0; j < account_types.length; j++){
|
||||||
// if(item_rows[k].account_id == account_types[j].id){
|
// if(item_rows[k].account_id == account_types[j].id){
|
||||||
// // Discount Items
|
// // Discount Items
|
||||||
// dis_amount = 0 - ((item_rows[k].price * amount)/100);
|
// dis_amount = 0 - ((item_rows[k].price * amount)/100);
|
||||||
// var discount_item_row = item_row_template(type, item_rows[k], dis_amount, amount);
|
// var discount_item_row = item_row_template(type, item_rows[k], dis_amount, amount);
|
||||||
// $("#order-items-table tbody").append(discount_item_row);
|
// $("#order-items-table tbody").append(discount_item_row);
|
||||||
@@ -870,15 +878,14 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
|||||||
// }
|
// }
|
||||||
// else {
|
// else {
|
||||||
// alert("No Items!");
|
// alert("No Items!");
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#order-sub-total").text(parseFloat(sub_total).toFixed(<%= precision.to_i %>));
|
|
||||||
}else{
|
}else{
|
||||||
$("#discount-amountErr").html("Discount is greater than sub total!");
|
$("#discount-amountErr").html("Discount is greater than sub total!");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function item_row_template(type, item, discount_amount, amount){
|
function item_row_template(type, item, discount_amount, amount){
|
||||||
@@ -886,25 +893,25 @@ function item_row_template(type, item, discount_amount, amount){
|
|||||||
if(type == 1){
|
if(type == 1){
|
||||||
dis_str = dis_str + "(" + amount + "%)"
|
dis_str = dis_str + "(" + amount + "%)"
|
||||||
}
|
}
|
||||||
var discount_item_row = "<tr class='discount-item-row' id='" + item.id + "'>" +
|
var discount_item_row = "<tr class='item-row new-discount' id='" + item.id + "'>" +
|
||||||
"<td style='width: 60%; text-align: left;'>" +
|
"<td style='width: 60%; text-align: left;'>" +
|
||||||
"<span id='item_account_type' class='hidden'>" +
|
"<span id='item_account_type' class='hidden'>" +
|
||||||
item.account_id +
|
item.account_id +
|
||||||
"</span>" +
|
"</span>" +
|
||||||
"<span id='item-name-price'>" +
|
"<span id='item-name-price'>" +
|
||||||
item.name + dis_str +
|
item.name + dis_str +
|
||||||
"</span>" +
|
"</span>" +
|
||||||
"</td>" +
|
"</td>" +
|
||||||
"<td style='width: 20%; text-align: right;'>" +
|
"<td style='width: 20%; text-align: right;'>" +
|
||||||
"<span id='item-qty'>1</span>" +
|
"<span id='item-qty'>1</span>" +
|
||||||
"</td>" +
|
"</td>" +
|
||||||
"<td style='width: 20%; text-align: right;'>" +
|
"<td style='width: 20%; text-align: right;'>" +
|
||||||
"<span id='item-total-price'>" +
|
"<span id='item-total-price'>" +
|
||||||
discount_amount +
|
discount_amount +
|
||||||
"</span>" +
|
"</span>" +
|
||||||
"</td>" +
|
"</td>" +
|
||||||
"</tr>";
|
"</tr>";
|
||||||
return discount_item_row;
|
return discount_item_row;
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<!-- <div class="row"> -->
|
<!-- <div class="row"> -->
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<a href="javascript:export_to('<%=reports_credit_payment_index_path%>.xls')" class = "btn btn-info wave-effects"><%= t("views.btn.exp_to_excel") %></a>
|
<a href="javascript:export_to('<%=reports_credit_payment_index_path%>.xls')" class = "btn btn-info wave-effects"><%= t("views.btn.exp_to_excel") %></a>
|
||||||
</div>
|
</div>
|
||||||
<!-- </div> -->
|
<!-- </div> -->
|
||||||
<!-- </div> -->
|
<!-- </div> -->
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
else
|
else
|
||||||
delimiter = ""
|
delimiter = ""
|
||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
<% unless @sale_data.blank? %>
|
<% unless @sale_data.blank? %>
|
||||||
|
|
||||||
<table class="table table-striped" border="0">
|
<table class="table table-striped" border="0">
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th colspan="7"><%= t("views.right_panel.detail.from_date") %> : <%= params[:from] rescue '-'%> , <%= t("views.right_panel.detail.to_date") %> : <%= params[:to] rescue '-'%></th>
|
<th colspan="7"><%= t("views.right_panel.detail.from_date") %> : <%= params[:from] rescue '-'%> , <%= t("views.right_panel.detail.to_date") %> : <%= params[:to] rescue '-'%></th>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
<tr>
|
<tr>
|
||||||
<th> <%= t("views.right_panel.detail.shift_name") %> </th>
|
<th> <%= t("views.right_panel.detail.shift_name") %> </th>
|
||||||
<th> <%= t("views.right_panel.detail.receipt_no") %></th>
|
<th> <%= t("views.right_panel.detail.receipt_no") %></th>
|
||||||
@@ -61,10 +61,10 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<% total_credit_amount = 0
|
<% total_credit_amount = 0
|
||||||
total_credit_payment = 0 %>
|
total_credit_payment = 0 %>
|
||||||
<% @sale_data.each do |credit| %>
|
<% @sale_data.each do |credit| %>
|
||||||
<% total_credit_amount += credit.payment_amount %>
|
<% total_credit_amount += credit.payment_amount %>
|
||||||
<% total_credit_payment += credit.credit_payment %>
|
<% total_credit_payment += credit.credit_payment %>
|
||||||
<tr>
|
<tr>
|
||||||
<% if @shift_from.nil? && @shift_to.nil? %>
|
<% if @shift_from.nil? && @shift_to.nil? %>
|
||||||
<td><%= credit.sale_date.utc.getlocal.strftime("%e %b %I:%M%p") rescue '-'%></td>
|
<td><%= credit.sale_date.utc.getlocal.strftime("%e %b %I:%M%p") rescue '-'%></td>
|
||||||
<% else %>
|
<% else %>
|
||||||
@@ -78,10 +78,10 @@
|
|||||||
Quick Service
|
Quick Service
|
||||||
<% else %>
|
<% else %>
|
||||||
Online Order
|
Online Order
|
||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td><%= credit.cashier_name rescue '-' %></td>
|
<td><%= credit.cashier_name rescue '-' %></td>
|
||||||
<td><%= credit.sale.customer.name rescue '-' %></td>
|
<td><%= credit.customer_name rescue '-' %></td>
|
||||||
<td><%= number_with_precision(credit.payment_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
<td><%= number_with_precision(credit.payment_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||||
<td>
|
<td>
|
||||||
<%if credit.credit_payment_shift_name == '-' %>
|
<%if credit.credit_payment_shift_name == '-' %>
|
||||||
@@ -112,20 +112,20 @@
|
|||||||
var check_arr = [];
|
var check_arr = [];
|
||||||
search_by_period();
|
search_by_period();
|
||||||
$('#sel_period').change(function(){
|
$('#sel_period').change(function(){
|
||||||
|
|
||||||
search_by_period();
|
search_by_period();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function search_by_period(){
|
function search_by_period(){
|
||||||
var period = $('#sel_period').val();
|
var period = $('#sel_period').val();
|
||||||
var period_type = 0;
|
var period_type = 0;
|
||||||
var from = "";
|
var from = "";
|
||||||
var to = "";
|
var to = "";
|
||||||
|
|
||||||
show_shift_name(period,period_type,from,to,'shift_item');
|
show_shift_name(period,period_type,from,to,'shift_item');
|
||||||
}
|
}
|
||||||
|
|
||||||
// OK button is clicked
|
// OK button is clicked
|
||||||
$('#from').bootstrapMaterialDatePicker().on('beforeChange', function(e, date){
|
$('#from').bootstrapMaterialDatePicker().on('beforeChange', function(e, date){
|
||||||
new_date = new Date(date) ;
|
new_date = new Date(date) ;
|
||||||
@@ -140,32 +140,32 @@
|
|||||||
to = new_date.getDate() + "-" + month + "-" + new_date.getFullYear();
|
to = new_date.getDate() + "-" + month + "-" + new_date.getFullYear();
|
||||||
$('#to').val(to)
|
$('#to').val(to)
|
||||||
search_by_date();
|
search_by_date();
|
||||||
});
|
});
|
||||||
|
|
||||||
function search_by_date(){
|
function search_by_date(){
|
||||||
|
|
||||||
from = $("#from").val();
|
from = $("#from").val();
|
||||||
to = $("#to").val();
|
to = $("#to").val();
|
||||||
|
|
||||||
var period = 0;
|
var period = 0;
|
||||||
var period_type = 1;
|
var period_type = 1;
|
||||||
|
|
||||||
if(to != '' && from != ''){
|
if(to != '' && from != ''){
|
||||||
shift_name = from + ',' + to;
|
shift_name = from + ',' + to;
|
||||||
|
|
||||||
check_arr.push(to);
|
check_arr.push(to);
|
||||||
|
|
||||||
console.log(check_arr.length)
|
console.log(check_arr.length)
|
||||||
if(check_arr.length == 1){
|
if(check_arr.length == 1){
|
||||||
show_shift_name(period,period_type,from,to,'shift_item');
|
show_shift_name(period,period_type,from,to,'shift_item');
|
||||||
}
|
}
|
||||||
if(check_arr.length == 3){
|
if(check_arr.length == 3){
|
||||||
check_arr = [];
|
check_arr = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function show_shift_name(period,period_type,from,to,shift_item){
|
function show_shift_name(period,period_type,from,to,shift_item){
|
||||||
var shift = $('#shift_name');
|
var shift = $('#shift_name');
|
||||||
if (from == '' && to == '') {
|
if (from == '' && to == '') {
|
||||||
@@ -173,18 +173,18 @@
|
|||||||
to = $("#to").val();
|
to = $("#to").val();
|
||||||
}
|
}
|
||||||
shift.empty();
|
shift.empty();
|
||||||
|
|
||||||
var str = '';
|
var str = '';
|
||||||
var param_shift = '';
|
var param_shift = '';
|
||||||
var param_shift = '<%= params[:shift_name] rescue '-'%>';
|
var param_shift = '<%= params[:shift_name] rescue '-'%>';
|
||||||
|
|
||||||
url = '<%= reports_get_shift_by_date_path %>';
|
url = '<%= reports_get_shift_by_date_path %>';
|
||||||
|
|
||||||
$.get(url, {period :period, period_type :period_type, from :from, to :to, report_type :shift_item} , function(data){
|
$.get(url, {period :period, period_type :period_type, from :from, to :to, report_type :shift_item} , function(data){
|
||||||
|
|
||||||
str = '<option value="0">--- All Shift ---</option>';
|
str = '<option value="0">--- All Shift ---</option>';
|
||||||
$(data.message).each(function(index){
|
$(data.message).each(function(index){
|
||||||
|
|
||||||
var local_date = data.message[index].local_opening_date + ' - ' + data.message[index].local_closing_date;
|
var local_date = data.message[index].local_opening_date + ' - ' + data.message[index].local_closing_date;
|
||||||
var sh_date = data.message[index].opening_date + ' - ' + data.message[index].closing_date;
|
var sh_date = data.message[index].opening_date + ' - ' + data.message[index].closing_date;
|
||||||
var shift_id = data.message[index].shift_id ;
|
var shift_id = data.message[index].shift_id ;
|
||||||
@@ -193,18 +193,18 @@
|
|||||||
selected = 'selected = "selected"';
|
selected = 'selected = "selected"';
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
selected = '';
|
selected = '';
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
selected = '';
|
selected = '';
|
||||||
}
|
}
|
||||||
str += '<option value="'+ shift_id +'" '+ selected +'>' + local_date + '</option>';
|
str += '<option value="'+ shift_id +'" '+ selected +'>' + local_date + '</option>';
|
||||||
|
|
||||||
// console.log(sh_date)
|
// console.log(sh_date)
|
||||||
})
|
})
|
||||||
shift.append(str);
|
shift.append(str);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th colspan="7"><%= t("views.right_panel.detail.from_date") %> : <%= params[:from] rescue '-'%> , <%= t("views.right_panel.detail.to_date") %> : <%= params[:to] rescue '-'%></th>
|
<th colspan="7"><%= t("views.right_panel.detail.from_date") %> : <%= params[:from] rescue '-'%> , <%= t("views.right_panel.detail.to_date") %> : <%= params[:to] rescue '-'%></th>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
<tr>
|
<tr>
|
||||||
<th> <%= t("views.right_panel.detail.shift_name") %> </th>
|
<th> <%= t("views.right_panel.detail.shift_name") %> </th>
|
||||||
<th> <%= t("views.right_panel.detail.receipt_no") %></th>
|
<th> <%= t("views.right_panel.detail.receipt_no") %></th>
|
||||||
@@ -33,10 +33,10 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
<% total_credit_amount = 0
|
<% total_credit_amount = 0
|
||||||
total_credit_payment = 0 %>
|
total_credit_payment = 0 %>
|
||||||
<% @sale_data.each do |credit| %>
|
<% @sale_data.each do |credit| %>
|
||||||
<% total_credit_amount += credit.payment_amount
|
<% total_credit_amount += credit.payment_amount
|
||||||
total_credit_payment += credit.credit_payment %>
|
total_credit_payment += credit.credit_payment %>
|
||||||
<tr>
|
<tr>
|
||||||
<% if @shift_from.nil? && @shift_to.nil? %>
|
<% if @shift_from.nil? && @shift_to.nil? %>
|
||||||
<td><%= credit.sale_date.utc.getlocal.strftime("%e %b %I:%M%p") rescue '-'%></td>
|
<td><%= credit.sale_date.utc.getlocal.strftime("%e %b %I:%M%p") rescue '-'%></td>
|
||||||
<% else %>
|
<% else %>
|
||||||
@@ -50,10 +50,10 @@
|
|||||||
Quick Service
|
Quick Service
|
||||||
<% else %>
|
<% else %>
|
||||||
Online Order
|
Online Order
|
||||||
<% end %>
|
<% end %>
|
||||||
</td>
|
</td>
|
||||||
<td><%= credit.cashier_name rescue '-' %></td>
|
<td><%= credit.cashier_name rescue '-' %></td>
|
||||||
<td><%= credit.sale.customer.name rescue '-' %></td>
|
<td><%= credit.customer_name rescue '-' %></td>
|
||||||
<td><%= credit.payment_amount rescue '-' %></td>
|
<td><%= credit.payment_amount rescue '-' %></td>
|
||||||
<td>
|
<td>
|
||||||
<%if credit.credit_payment_shift_name == '-' %>
|
<%if credit.credit_payment_shift_name == '-' %>
|
||||||
@@ -78,4 +78,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -138,8 +138,7 @@
|
|||||||
delimiter = ""
|
delimiter = ""
|
||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
<% unless @sale_data.empty? %>
|
<% unless @sale_data.blank? %>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<% void = 0 %>
|
<% void = 0 %>
|
||||||
<% mpu = 0 %>
|
<% mpu = 0 %>
|
||||||
@@ -322,7 +321,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<% total_tax = 0 %>
|
<% total_tax = 0 %>
|
||||||
<% net = 0 %>
|
<% net = 0 %>
|
||||||
<% unless @tax.empty? %>
|
<% unless @tax.blank? %>
|
||||||
<% @tax.each do |tax|
|
<% @tax.each do |tax|
|
||||||
total_tax += tax.tax_amount.to_f %>
|
total_tax += tax.tax_amount.to_f %>
|
||||||
<tr style="font-weight:600;">
|
<tr style="font-weight:600;">
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<div class="card" style="width:129%;">
|
<div class="card" style="width:129%;">
|
||||||
<div class="body table-responsive">
|
<div class="body table-responsive">
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan="15"> <%= t("views.right_panel.detail.from_date") %> : <%= @from.utc.getlocal.strftime("%Y-%b-%d") rescue '-' %> - <%= t("views.right_panel.detail.to_date") %> : <%= @to.utc.getlocal.strftime("%Y-%b-%d") rescue '-'%></th>
|
<th colspan="15"> <%= t("views.right_panel.detail.from_date") %> : <%= @from.utc.getlocal.strftime("%Y-%b-%d") rescue '-' %> - <%= t("views.right_panel.detail.to_date") %> : <%= @to.utc.getlocal.strftime("%Y-%b-%d") rescue '-'%></th>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -58,8 +58,8 @@
|
|||||||
<th style='text-align:center;'><%= t("views.right_panel.detail.giftvoucher_sales") %></th>
|
<th style='text-align:center;'><%= t("views.right_panel.detail.giftvoucher_sales") %></th>
|
||||||
<% end %>
|
<% end %>
|
||||||
<th style='text-align:center;'>(<%= t("views.right_panel.detail.discount") %>)</th>
|
<th style='text-align:center;'>(<%= t("views.right_panel.detail.discount") %>)</th>
|
||||||
<!-- <th style='text-align:center;'><%= t("views.right_panel.detail.grand_total") %> + <br/> <%= t("views.right_panel.detail.rnd_adj_sh") %></th> -->
|
<!-- <th style='text-align:center;'><%= t("views.right_panel.detail.grand_total") %> + <br/> <%= t("views.right_panel.detail.rnd_adj_sh") %></th> -->
|
||||||
<th style='text-align:center;'><%= t("views.right_panel.detail.grand_total") %></th>
|
<th style='text-align:center;'><%= t("views.right_panel.detail.grand_total") %></th>
|
||||||
<th style='text-align:center;'><%= t("views.right_panel.detail.rnd_adj_sh") %></th>
|
<th style='text-align:center;'><%= t("views.right_panel.detail.rnd_adj_sh") %></th>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
@@ -75,8 +75,8 @@
|
|||||||
else
|
else
|
||||||
delimiter = ""
|
delimiter = ""
|
||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
<% unless @sale_data.empty? %>
|
<% unless @sale_data.blank? %>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<% void = 0 %>
|
<% void = 0 %>
|
||||||
@@ -97,8 +97,8 @@
|
|||||||
<% discount = 0 %>
|
<% discount = 0 %>
|
||||||
<% kbzpay = 0 %>
|
<% kbzpay = 0 %>
|
||||||
<% total = 0 %>
|
<% total = 0 %>
|
||||||
<% grand_total = 0 %>
|
<% grand_total = 0 %>
|
||||||
<% old_grand_total = 0 %>
|
<% old_grand_total = 0 %>
|
||||||
<% count = 1 %> <% rounding_adj = 0 %>
|
<% count = 1 %> <% rounding_adj = 0 %>
|
||||||
<% @sale_data.each do |sale| %>
|
<% @sale_data.each do |sale| %>
|
||||||
<% void += sale[:void_amount] %>
|
<% void += sale[:void_amount] %>
|
||||||
@@ -114,14 +114,14 @@
|
|||||||
<% giftvoucher += sale[:giftvoucher_amount] %>
|
<% giftvoucher += sale[:giftvoucher_amount] %>
|
||||||
<% paypar += sale[:paypar_amount] %>
|
<% paypar += sale[:paypar_amount] %>
|
||||||
<% cash += sale[:cash_amount]-sale[:total_change_amount] %>
|
<% cash += sale[:cash_amount]-sale[:total_change_amount] %>
|
||||||
<% credit += sale[:credit_amount] %>
|
<% credit += sale[:credit_amount] %>
|
||||||
<% foc += sale[:foc_amount] %>
|
<% foc += sale[:foc_amount] %>
|
||||||
<% discount += sale[:total_discount] %>
|
<% discount += sale[:total_discount] %>
|
||||||
<% kbzpay += sale[:kbzpay_amount] %>
|
<% kbzpay += sale[:kbzpay_amount] %>
|
||||||
<% total += sale[:grand_total].to_f + sale[:rounding_adj].to_f %>
|
<% total += sale[:grand_total].to_f + sale[:rounding_adj].to_f %>
|
||||||
<% grand_total += sale[:grand_total].to_f %>
|
<% grand_total += sale[:grand_total].to_f %>
|
||||||
<% old_grand_total += sale[:old_grand_total].to_f %>
|
<% old_grand_total += sale[:old_grand_total].to_f %>
|
||||||
<% rounding_adj += sale[:rounding_adj].to_f %>
|
<% rounding_adj += sale[:rounding_adj].to_f %>
|
||||||
<tr>
|
<tr>
|
||||||
<td style='text-align:right;'><%= count %></td>
|
<td style='text-align:right;'><%= count %></td>
|
||||||
<td><%= sale[:sale_date].strftime("#{sale[:sale_date].day.ordinalize} %b") rescue '-' %></td>
|
<td><%= sale[:sale_date].strftime("#{sale[:sale_date].day.ordinalize} %b") rescue '-' %></td>
|
||||||
@@ -161,13 +161,13 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:cash_amount]-sale[:total_change_amount]), delimiter: delimiter) rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:cash_amount]-sale[:total_change_amount]), delimiter: delimiter) rescue '-'%></td>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:credit_amount]),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:credit_amount]),delimiter => ',') rescue '-'%></td>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:foc_amount]),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:foc_amount]),delimiter => ',') rescue '-'%></td>
|
||||||
<% if @payment_methods.include? ("GiftVoucher") %>
|
<% if @payment_methods.include? ("GiftVoucher") %>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:giftvoucher_amount]),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:giftvoucher_amount]),delimiter => ',') rescue '-'%></td>
|
||||||
<% end %>
|
<% end %>
|
||||||
<td style='text-align:right;'>(<%= number_with_delimiter(sprintf("%.2f",sale[:total_discount]), delimiter => ',') rescue '-'%>)</td>
|
<td style='text-align:right;'>(<%= number_with_delimiter(sprintf("%.2f",sale[:total_discount]), delimiter => ',') rescue '-'%>)</td>
|
||||||
<!-- <td style='text-align:right;'><%= number_with_delimiter(sale[:grand_total].to_f + sale[:rounding_adj].to_f ,delimiter => ',') rescue '-'%></td> -->
|
<!-- <td style='text-align:right;'><%= number_with_delimiter(sale[:grand_total].to_f + sale[:rounding_adj].to_f ,delimiter => ',') rescue '-'%></td> -->
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:grand_total]),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:grand_total]),delimiter => ',') rescue '-'%></td>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:rounding_adj].to_f),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",sale[:rounding_adj].to_f),delimiter => ',') rescue '-'%></td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
@@ -175,7 +175,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<% colspan = 7 %>
|
<% colspan = 7 %>
|
||||||
<tr style="font-weight:600;">
|
<tr style="font-weight:600;">
|
||||||
<td colspan="3" style='text-align:center;'>Total</td>
|
<td colspan="3" style='text-align:center;'>Total</td>
|
||||||
<% if @payment_methods.include? ("MPU") %>
|
<% if @payment_methods.include? ("MPU") %>
|
||||||
<% colspan += 1 %>
|
<% colspan += 1 %>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",mpu),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",mpu),delimiter => ',') rescue '-'%></td>
|
||||||
@@ -222,21 +222,21 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",cash),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",cash),delimiter => ',') rescue '-'%></td>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",credit),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",credit),delimiter => ',') rescue '-'%></td>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",foc), delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",foc), delimiter => ',') rescue '-'%></td>
|
||||||
<% if @payment_methods.include? ("GiftVoucher") %>
|
<% if @payment_methods.include? ("GiftVoucher") %>
|
||||||
<% colspan += 1 %>
|
<% colspan += 1 %>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",giftvoucher), delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",giftvoucher), delimiter => ',') rescue '-'%></td>
|
||||||
<% end %>
|
<% end %>
|
||||||
<td style='text-align:right;'>(<%= number_with_delimiter(discount,delimiter => ',') rescue '-'%>)</td>
|
<td style='text-align:right;'>(<%= number_with_delimiter(discount,delimiter => ',') rescue '-'%>)</td>
|
||||||
<!-- <td style='text-align:right;'><%= number_with_delimiter(total,delimiter => ',') rescue '-'%></td> -->
|
<!-- <td style='text-align:right;'><%= number_with_delimiter(total,delimiter => ',') rescue '-'%></td> -->
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",grand_total),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",grand_total),delimiter => ',') rescue '-'%></td>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",rounding_adj),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",rounding_adj),delimiter => ',') rescue '-'%></td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
<% total_tax = 0 %>
|
<% total_tax = 0 %>
|
||||||
<% net = 0 %>
|
<% net = 0 %>
|
||||||
<% unless @tax.empty? %>
|
<% unless @tax.blank? %>
|
||||||
<% @tax.each do |tax|
|
<% @tax.each do |tax|
|
||||||
total_tax += tax.tax_amount.to_f %>
|
total_tax += tax.tax_amount.to_f %>
|
||||||
<tr style="font-weight:600;">
|
<tr style="font-weight:600;">
|
||||||
<td colspan="<%= colspan %>" style='text-align:right;'><%= tax.tax_name rescue '-'%></td>
|
<td colspan="<%= colspan %>" style='text-align:right;'><%= tax.tax_name rescue '-'%></td>
|
||||||
@@ -252,7 +252,7 @@
|
|||||||
<tr style="font-weight:600;">
|
<tr style="font-weight:600;">
|
||||||
<td colspan="<%= colspan %>" style='text-align:right;'><%= t("views.right_panel.detail.net_amount") %></td>
|
<td colspan="<%= colspan %>" style='text-align:right;'><%= t("views.right_panel.detail.net_amount") %></td>
|
||||||
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",net),delimiter => ',') rescue '-'%></td>
|
<td style='text-align:right;'><%= number_with_delimiter(sprintf("%.2f",net),delimiter => ',') rescue '-'%></td>
|
||||||
<td colspan="2"> </td>
|
<td colspan="2"> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -264,4 +264,4 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -98,8 +98,8 @@
|
|||||||
<%if !@sale_data.nil? %>
|
<%if !@sale_data.nil? %>
|
||||||
<% @sale_data.each do |result| %>
|
<% @sale_data.each do |result| %>
|
||||||
|
|
||||||
<% grand_total +=result.grand_total.to_f %>
|
<% grand_total += result.grand_total.to_f %>
|
||||||
<% old_grand_total += result.grand_total_after_rounding() %>
|
<% old_grand_total += result.grand_total.to_f - result.rounding_adjustment.to_f %>
|
||||||
<% total_tax += result.total_tax.to_f %>
|
<% total_tax += result.total_tax.to_f %>
|
||||||
<% total_sum += result.total_amount.to_f %>
|
<% total_sum += result.total_amount.to_f %>
|
||||||
<% discount_amt += result.total_discount.to_f %>
|
<% discount_amt += result.total_discount.to_f %>
|
||||||
@@ -124,50 +124,35 @@
|
|||||||
</td>
|
</td>
|
||||||
<td><%= result.receipt_no rescue '-' %> </td>
|
<td><%= result.receipt_no rescue '-' %> </td>
|
||||||
<td><%= result.cashier_name rescue '-' %></td>
|
<td><%= result.cashier_name rescue '-' %></td>
|
||||||
<td><%= number_with_precision(result.total_amount, precision: precision.to_i ,delimiter: delimiter) %></td>
|
<td><%= number_with_precision(result.total_amount, precision: precision.to_i, delimiter: delimiter) %></td>
|
||||||
<td><%= number_with_precision(result.total_discount, precision: precision.to_i ,delimiter: delimiter) rescue '0' %>
|
<td><%= number_with_precision(result.total_discount, precision: precision.to_i, delimiter: delimiter) rescue '0' %>
|
||||||
</td>
|
</td>
|
||||||
<!-- <%if result.customer.customer_type == "Takeaway"%>
|
|
||||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %></td>
|
|
||||||
<%end%> -->
|
|
||||||
<% if !result.sale_taxes.empty? %>
|
<% if !result.sale_taxes.empty? %>
|
||||||
<% num = 1
|
<% num = 1 %>
|
||||||
if tax_flag && tax_count > 0 %>
|
<% if tax_flag && tax_count > 0 %>
|
||||||
<% while num <= tax_count %>
|
<% while num <= tax_count %>
|
||||||
<td>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
<% num += 1 %>
|
||||||
</td>
|
<% end %>
|
||||||
<% num += 1
|
<% end %>
|
||||||
end %>
|
<% result.sale_taxes.each do |tax| %>
|
||||||
<% end %>
|
<td><%= number_with_precision(tax.tax_payable_amount, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% result.sale_taxes.each do |tax| %>
|
<%end%>
|
||||||
<td>
|
<% num = 1 %>
|
||||||
<%= number_with_precision(tax.tax_payable_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %>
|
<% if !tax_flag && tax_count > 0 %>
|
||||||
</td>
|
<% while num <= tax_count %>
|
||||||
<%end%>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% num = 1
|
<% num += 1 %>
|
||||||
if tax_flag==false && tax_count > 0 %>
|
<% end %>
|
||||||
<% while num <= tax_count %>
|
<% end %>
|
||||||
<td>
|
<% else %>
|
||||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
<% @tax_profiles.each do |tax| %>
|
||||||
</td>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% num += 1
|
<% end %>
|
||||||
end %>
|
<%end%>
|
||||||
<% end %>
|
<td><%= number_with_precision(result.grand_total - result.rounding_adjustment, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% else %>
|
<td><%= number_with_precision(result.rounding_adjustment.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% @tax_profiles.each do |tax| %>
|
<td><%= number_with_precision(result.grand_total, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
|
||||||
<% end %>
|
|
||||||
<%end%>
|
|
||||||
|
|
||||||
<% if result.old_grand_total.nil? %>
|
|
||||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
|
||||||
<%else%>
|
|
||||||
<td><%= number_with_precision(result.old_grand_total, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
|
||||||
<%end%>
|
|
||||||
|
|
||||||
<td><%= result.rounding_adjustment.to_f rescue '-' %></td>
|
|
||||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i ,delimiter: delimiter) %></td>
|
|
||||||
<% if @lookup.value.to_i == 1 %>
|
<% if @lookup.value.to_i == 1 %>
|
||||||
<td>
|
<td>
|
||||||
<!-- ############### Need to Check SyncStatus ############# -->
|
<!-- ############### Need to Check SyncStatus ############# -->
|
||||||
@@ -185,54 +170,34 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<tr style="border-top:4px double #666;">
|
<tr style="border-top:4px double #666;">
|
||||||
<td colspan="3"> </td>
|
<td colspan="3"> </td>
|
||||||
<td><b><%= number_with_precision(total_sum, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b></td>
|
<td><b><%= number_with_precision(total_sum, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||||
<td><b><%= number_with_precision(discount_amt, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b></td>
|
<td><b><%= number_with_precision(discount_amt, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||||
<!-- <% if !@sale_taxes.empty?
|
|
||||||
@sale_taxes.each do |tax| %>
|
|
||||||
<td>
|
|
||||||
<b><%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b>
|
|
||||||
</td>
|
|
||||||
<% end %>
|
|
||||||
<% else %>
|
|
||||||
<% @tax_profiles.each do |tax| %>
|
|
||||||
<td><b>0</b></td>
|
|
||||||
<% end %>
|
|
||||||
<% end %> -->
|
|
||||||
|
|
||||||
<% if !@sale_taxes.empty? %>
|
<% if !@sale_taxes.empty? %>
|
||||||
<% num = 1
|
<% num = 1
|
||||||
if ttax_flag && ttax_count > 0 %>
|
if ttax_flag && ttax_count > 0 %>
|
||||||
<% while num <= ttax_count %>
|
<% while num <= ttax_count %>
|
||||||
<td>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) %></td>
|
||||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
|
||||||
</td>
|
|
||||||
<% num += 1
|
<% num += 1
|
||||||
end %>
|
end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% @sale_taxes.each do |tax| %>
|
<% @sale_taxes.each do |tax| %>
|
||||||
<td>
|
<td><%= number_with_precision(tax.st_amount, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %>
|
|
||||||
</td>
|
|
||||||
<%end%>
|
<%end%>
|
||||||
<% num = 1
|
<% num = 1
|
||||||
if ttax_flag==false && ttax_count > 0 %>
|
if ttax_flag==false && ttax_count > 0 %>
|
||||||
<% while num <= ttax_count %>
|
<% while num <= ttax_count %>
|
||||||
<td>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) %></td>
|
||||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
|
||||||
</td>
|
|
||||||
<% num += 1
|
<% num += 1
|
||||||
end %>
|
end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<% @tax_profiles.each do |tax| %>
|
<% @tax_profiles.each do |tax| %>
|
||||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%end%>
|
<%end%>
|
||||||
|
<td><b><%= number_with_precision(old_grand_total.to_f, precision: precision.to_i, delimiter: delimiter) rescue '0' %></b></td>
|
||||||
<td><b><%= number_with_precision(old_grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '0' %></b></td>
|
<td><b><%= number_with_precision(rounding_adj.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||||
|
<td><b><%= number_with_precision(grand_total.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||||
<td><b><%= rounding_adj.to_f rescue '-' %></b></td>
|
|
||||||
<td><b><%= number_with_precision(grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b></td>
|
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<th><%= t("views.right_panel.detail.total") %> <%= t("views.right_panel.detail.amount") %></th>
|
<th><%= t("views.right_panel.detail.total") %> <%= t("views.right_panel.detail.amount") %></th>
|
||||||
<th><%= t("views.right_panel.detail.discount") %> <%= t("views.right_panel.detail.amount") %> </th>
|
<th><%= t("views.right_panel.detail.discount") %> <%= t("views.right_panel.detail.amount") %> </th>
|
||||||
<% @tax_profiles.each do |tax| %>
|
<% @tax_profiles.each do |tax| %>
|
||||||
<th><%= tax.name %></th>
|
<th><%= tax.name %></th>
|
||||||
<% end %>
|
<% end %>
|
||||||
<!-- <th>Other Amount</th> -->
|
<!-- <th>Other Amount</th> -->
|
||||||
<th><%= t("views.right_panel.detail.grand_total") %></th>
|
<th><%= t("views.right_panel.detail.grand_total") %></th>
|
||||||
@@ -74,11 +74,11 @@
|
|||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
|
|
||||||
<%if !@sale_data.nil? %>
|
<%if @sale_data %>
|
||||||
<% @sale_data.each do |result| %>
|
<% @sale_data.each do |result| %>
|
||||||
|
|
||||||
<% grand_total +=result.grand_total.to_f %>
|
<% grand_total += result.grand_total.to_f %>
|
||||||
<% old_grand_total += result.grand_total_after_rounding() %>
|
<% old_grand_total += result.grand_total.to_f - result.rounding_adjustment.to_f %>
|
||||||
<% total_tax += result.total_tax.to_f %>
|
<% total_tax += result.total_tax.to_f %>
|
||||||
<% total_sum += result.total_amount.to_f %>
|
<% total_sum += result.total_amount.to_f %>
|
||||||
<% discount_amt += result.total_discount.to_f %>
|
<% discount_amt += result.total_discount.to_f %>
|
||||||
@@ -91,59 +91,45 @@
|
|||||||
tax_flag = false
|
tax_flag = false
|
||||||
end
|
end
|
||||||
end %>
|
end %>
|
||||||
|
<tr>
|
||||||
<tr>
|
<td>
|
||||||
<td>
|
<%if result.type %>
|
||||||
<%if result.type %>
|
<%= result.type %> - <%= result.name %>
|
||||||
<%= result.type %> - <%= result.name %>
|
<% else %>
|
||||||
<% else %>
|
-
|
||||||
-
|
<% end %>
|
||||||
<% end %>
|
</td>
|
||||||
</td>
|
<td><%= result.receipt_no rescue '-' %> </td>
|
||||||
<td><%= result.receipt_no rescue '-' %> </td>
|
<td><%= result.cashier_name rescue '-' %></td>
|
||||||
<td><%= result.cashier_name rescue '-' %></td>
|
<td><%= number_with_precision(result.total_amount, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<td><%= number_with_precision(result.total_amount, precision: precision.to_i ,delimiter: delimiter) %></td>
|
<td><%= number_with_precision(result.total_discount, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<td><%= number_with_precision(result.total_discount, precision: precision.to_i ,delimiter: delimiter) rescue '0' %>
|
<% if !result.sale_taxes.empty? %>
|
||||||
</td>
|
<% num = 1 %>
|
||||||
<% if !result.sale_taxes.empty? %>
|
<% if tax_flag && tax_count > 0 %>
|
||||||
<% num = 1
|
<% while num <= tax_count %>
|
||||||
if tax_flag && tax_count > 0 %>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% while num <= tax_count %>
|
<% num += 1 %>
|
||||||
<td>
|
<% end %>
|
||||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
|
||||||
</td>
|
|
||||||
<% num += 1
|
|
||||||
end %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<% result.sale_taxes.each do |tax| %>
|
<% result.sale_taxes.each do |tax| %>
|
||||||
<td>
|
<td><%= number_with_precision(tax.tax_payable_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||||
<%= number_with_precision(tax.tax_payable_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %>
|
<% end %>
|
||||||
</td>
|
<% num = 1
|
||||||
<%end%>
|
if tax_flag==false && tax_count > 0 %>
|
||||||
<% num = 1
|
<% while num <= tax_count %>
|
||||||
if tax_flag==false && tax_count > 0 %>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% while num <= tax_count %>
|
<% num += 1
|
||||||
<td>
|
end %>
|
||||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
|
||||||
</td>
|
|
||||||
<% num += 1
|
|
||||||
end %>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<% @tax_profiles.each do |tax| %>
|
<% @tax_profiles.each do |tax| %>
|
||||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%end%>
|
<%end%>
|
||||||
|
<td><%= number_with_precision(result.grand_total - result.rounding_adjustment, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<% if result.old_grand_total.nil? %>
|
<td><%= number_with_precision(result.rounding_adjustment.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
<td><%= number_with_precision(result.grand_total, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<%else%>
|
</tr>
|
||||||
<td><%= number_with_precision(result.old_grand_total, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
|
||||||
<%end%>
|
|
||||||
|
|
||||||
<td><%= result.rounding_adjustment.to_f rescue '-' %></td>
|
|
||||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i ,delimiter: delimiter) %></td>
|
|
||||||
</tr>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<tr style="border-top:4px double #666;">
|
<tr style="border-top:4px double #666;">
|
||||||
<td colspan="3"> </td>
|
<td colspan="3"> </td>
|
||||||
@@ -153,23 +139,17 @@
|
|||||||
<% num = 1
|
<% num = 1
|
||||||
if ttax_flag && ttax_count > 0 %>
|
if ttax_flag && ttax_count > 0 %>
|
||||||
<% while num <= ttax_count %>
|
<% while num <= ttax_count %>
|
||||||
<td>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
|
||||||
</td>
|
|
||||||
<% num += 1
|
<% num += 1
|
||||||
end %>
|
end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% @sale_taxes.each do |tax| %>
|
<% @sale_taxes.each do |tax| %>
|
||||||
<td>
|
<td><%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||||
<%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %>
|
|
||||||
</td>
|
|
||||||
<%end%>
|
<%end%>
|
||||||
<% num = 1
|
<% num = 1
|
||||||
if ttax_flag==false && ttax_count > 0 %>
|
if ttax_flag==false && ttax_count > 0 %>
|
||||||
<% while num <= ttax_count %>
|
<% while num <= ttax_count %>
|
||||||
<td>
|
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
|
||||||
</td>
|
|
||||||
<% num += 1
|
<% num += 1
|
||||||
end %>
|
end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -178,12 +158,9 @@
|
|||||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%end%>
|
<%end%>
|
||||||
|
<td><b><%= number_with_precision(old_grand_total.to_f, precision: precision.to_i, delimiter: delimiter) rescue '0' %></b></td>
|
||||||
<td><b><%= number_with_precision(old_grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '0' %></b></td>
|
<td><b><%= number_with_precision(rounding_adj.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||||
|
<td><b><%= number_with_precision(grand_total.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||||
<td><b><%= rounding_adj.to_f rescue '-' %></b></td>
|
|
||||||
<td><b><%= number_with_precision(grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b></td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="3"> </td>
|
<td colspan="3"> </td>
|
||||||
@@ -209,4 +186,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-actions p-l-20">
|
<div class="form-actions p-l-20">
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-12 col-md-4 col-lg-4">
|
<div class="col-xs-12 col-sm-12 col-md-4 col-lg-4">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
2) <%= t("views.right_panel.button.back") %> - <%= t("views.right_panel.detail.back_txt") %> <%= t("views.right_panel.detail.menu_txt") %> <br>
|
2) <%= t("views.right_panel.button.back") %> - <%= t("views.right_panel.detail.back_txt") %> <%= t("views.right_panel.detail.menu_txt") %> <br>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
@@ -114,4 +114,3 @@
|
|||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
100
config/deploy.rb
100
config/deploy.rb
@@ -1,20 +1,106 @@
|
|||||||
lock "3.10.1"
|
# config valid only for current version of Capistrano
|
||||||
|
lock '3.11.2'
|
||||||
|
|
||||||
set :application, "zsai"
|
set :application, 'SmartsalesSX'
|
||||||
set :repo_url, 'git@bitbucket.org:code2lab/sxrestaurant.git'
|
|
||||||
|
|
||||||
set :deploy_user, 'deploy'
|
set :deploy_user, 'deploy'
|
||||||
|
set :deploy_to, '/home/deploy/apps/SmartsalesSX'
|
||||||
|
|
||||||
set :rbenv_type, :global
|
# setup repo details
|
||||||
|
#set :scm, :git
|
||||||
|
set :repo_url, 'git@gitlab.com:code2lab/SXRestaurant.git'
|
||||||
|
|
||||||
|
# setup rbenv.
|
||||||
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
|
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
|
||||||
|
|
||||||
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
|
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
|
||||||
|
|
||||||
|
# how many old releases do we want to keep, not much
|
||||||
set :keep_releases, 5
|
set :keep_releases, 5
|
||||||
|
|
||||||
set :linked_files, %w{config/database.yml config/secrets.yml config/puma.rb config/sidekiq.yml config/shops.json config/cable.yml}
|
# files we want symlinking to specific entries in shared
|
||||||
|
set :linked_files, %w{config/database.yml config/secrets.yml}
|
||||||
|
|
||||||
set :linked_dirs, %w{bin log tmp/puma tmp/pids tmp/cache tmp/sockets vendor/bundle public/system pids sockets}
|
# dirs we want symlinking to shared
|
||||||
|
set :linked_dirs, %w{log tmp/pids tmp/puma tmp/cache tmp/sockets vendor/bundle public/system}
|
||||||
|
|
||||||
|
# what specs should be run before deployment is allowed to
|
||||||
|
# continue, see lib/capistrano/tasks/run_tests.cap
|
||||||
set :tests, []
|
set :tests, []
|
||||||
set :pty, true
|
set :pty, true
|
||||||
|
|
||||||
|
set :puma_jungle_conf, '/etc/puma.conf'
|
||||||
|
set :puma_run_path, '/usr/local/bin/run-puma'
|
||||||
|
set :puma_bind, %w(tcp://0.0.0.0:9393)
|
||||||
|
|
||||||
|
#set :enable_ssl, true
|
||||||
|
|
||||||
|
# which config files should be copied by deploy:setup_config
|
||||||
|
# see documentation in lib/capistrano/tasks/setup_config.cap
|
||||||
|
# for details of operations
|
||||||
|
set(:config_files, %w(
|
||||||
|
database.yml
|
||||||
|
log_rotation
|
||||||
|
monit.conf
|
||||||
|
sidekiq_init.sh
|
||||||
|
sidekiq.yml
|
||||||
|
))
|
||||||
|
|
||||||
|
# which config files should be made executable after copying
|
||||||
|
# by deploy:setup_config
|
||||||
|
set(:executable_config_files, %w(
|
||||||
|
sidekiq_init.sh
|
||||||
|
))
|
||||||
|
|
||||||
|
# files which need to be symlinked to other parts of the
|
||||||
|
# filesystem. For example nginx virtualhosts, log rotation
|
||||||
|
# init scripts etc. The full_app_name variable isn't
|
||||||
|
# available at this point so we use a custom template {{}}
|
||||||
|
# tag and then add it at run time.
|
||||||
|
set(:symlinks, [
|
||||||
|
{
|
||||||
|
source: "sidekiq_init.sh",
|
||||||
|
link: "/etc/init.d/sidekiq_{{full_app_name}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
source: "log_rotation",
|
||||||
|
link: "/etc/logrotate.d/{{full_app_name}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
source: "monit",
|
||||||
|
link: "/etc/monit/conf.d/{{full_app_name}}.conf"
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
# this:
|
||||||
|
# http://www.capistranorb.com/documentation/getting-started/flow/
|
||||||
|
# is worth reading for a quick overview of what tasks are called
|
||||||
|
# and when for `cap stage deploy`
|
||||||
|
|
||||||
|
namespace :deploy do
|
||||||
|
# make sure we're deploying what we think we're deploying
|
||||||
|
before :deploy, "deploy:check_revision"
|
||||||
|
# only allow a deploy with passing tests to deployed
|
||||||
|
before :deploy, "deploy:run_tests"
|
||||||
|
# compile assets locally then rsync
|
||||||
|
after 'deploy:symlink:shared', 'deploy:compile_assets_locally'
|
||||||
|
Rake::Task["deploy:assets:precompile"].clear_actions
|
||||||
|
|
||||||
|
after :finishing, 'deploy:cleanup'
|
||||||
|
|
||||||
|
#nginx will be install in the Load Balancer - No need to deploy there
|
||||||
|
# remove the default nginx configuration as it will tend
|
||||||
|
# to conflict with our configs.
|
||||||
|
#before 'deploy:setup_config', 'nginx:remove_default_vhost'
|
||||||
|
|
||||||
|
# reload nginx to it will pick up any modified vhosts from
|
||||||
|
# setup_config
|
||||||
|
#after 'deploy:setup_config', 'nginx:reload'
|
||||||
|
|
||||||
|
# Restart monit so it will pick up any monit configurations
|
||||||
|
# we've added
|
||||||
|
#after 'deploy:setup_config', 'monit:restart'
|
||||||
|
|
||||||
|
# As of Capistrano 3.1, the `deploy:restart` task is not called
|
||||||
|
# automatically.
|
||||||
|
after 'finishing', 'puma:jungle:restart'
|
||||||
|
end
|
||||||
|
|||||||
@@ -9,13 +9,12 @@
|
|||||||
# set :rails_env, :production
|
# set :rails_env, :production
|
||||||
|
|
||||||
set :stage, :production
|
set :stage, :production
|
||||||
set :server_name, "svr.sxrestaurant.host"
|
set :server_name, "a.c2l.shop"
|
||||||
|
set :branch, "r-1902001-01"
|
||||||
|
|
||||||
set :full_app_name, "#{fetch(:application)}_#{fetch(:stage)}"
|
set :full_app_name, "#{fetch(:application)}_#{fetch(:stage)}"
|
||||||
|
server '167.71.194.57', user: 'deploy', roles: %w{web app db}, primary: true
|
||||||
server '52.77.219.228', user: 'deploy', roles: %w{web app db}, primary: true
|
|
||||||
|
|
||||||
set :deploy_to, "/home/#{fetch(:deploy_user)}/apps/#{fetch(:full_app_name)}"
|
set :deploy_to, "/home/#{fetch(:deploy_user)}/apps/#{fetch(:full_app_name)}"
|
||||||
set :rbenv_ruby, '2.4.1'
|
set :rbenv_ruby, '2.6.5'
|
||||||
set :rails_env, :production
|
set :rails_env, :production
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,11 @@ class ActionController::Base
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
# check for license file
|
# check for license file
|
||||||
if check_license
|
# if check_license
|
||||||
current_license(ENV["SX_PROVISION_URL"])
|
# current_license(ENV["SX_PROVISION_URL"])
|
||||||
else
|
# else
|
||||||
redirect_to activate_path
|
# redirect_to activate_path
|
||||||
end
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
if File.exist?("config/license.yml")
|
if File.exist?("config/license.yml")
|
||||||
config = YAML.load_file(Rails.root.join("config/license.yml"))
|
config = YAML.load_file(Rails.root.join("config/license.yml"))
|
||||||
config.fetch(Rails.env, {}).each do |key, value|
|
config.fetch(Rails.env, {}).each do |key, value|
|
||||||
ENV[key.upcase] = value.to_s
|
ENV[key.upcase] = value.to_s
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
application_path="#{File.expand_path("../..", __FILE__)}"
|
# application_path="#{File.expand_path("../..", __FILE__)}"
|
||||||
directory application_path
|
# directory application_path
|
||||||
#environment ENV.fetch("RAILS_ENV") { "production" }
|
# #environment ENV.fetch("RAILS_ENV") { "production" }
|
||||||
environment "production"
|
# environment "production"
|
||||||
pidfile "#{application_path}/tmp/puma/pid"
|
# pidfile "#{application_path}/tmp/puma/pid"
|
||||||
state_path "#{application_path}/tmp/puma/state"
|
# state_path "#{application_path}/tmp/puma/state"
|
||||||
stdout_redirect "#{application_path}/log/puma.stdout.log", "#{application_path}/log/puma.stderr.log"
|
# stdout_redirect "#{application_path}/log/puma.stdout.log", "#{application_path}/log/puma.stderr.log"
|
||||||
port ENV.fetch("PORT") { 62158 }
|
# port ENV.fetch("PORT") { 62158 }
|
||||||
workers 2
|
# workers 2
|
||||||
preload_app!
|
# preload_app!
|
||||||
threads 1,1
|
# threads 1,1
|
||||||
|
|||||||
@@ -117,6 +117,14 @@ scope "(:locale)", locale: /en|mm/ do
|
|||||||
|
|
||||||
#API for sync cloud
|
#API for sync cloud
|
||||||
post 'sync_data' => 'sync#sync_data'
|
post 'sync_data' => 'sync#sync_data'
|
||||||
|
|
||||||
|
namespace :loader_service do
|
||||||
|
post "get_sale_data" => "load_data#get_sale_data_rage"
|
||||||
|
post "get_detail_sale_data" => "load_data#get_detail_sale_data"
|
||||||
|
post "get_tender_sale_data" => "load_data#get_tender_sale_data"
|
||||||
|
post "get_daily_sale_data" => "load_data#get_daily_sale_data"
|
||||||
|
post "get_check_sale_data" => "load_data#get_check_sale_data"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
#--------- Cashier ------------#
|
#--------- Cashier ------------#
|
||||||
|
|||||||
12
lib/capistrano/substitute_strings.rb
Normal file
12
lib/capistrano/substitute_strings.rb
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# we often want to refer to variables which
|
||||||
|
# are defined in subsequent stage files. This
|
||||||
|
# let's us use the {{var}} to represent fetch(:var)
|
||||||
|
# in strings which are only evaluated at runtime.
|
||||||
|
|
||||||
|
def sub_strings(input_string)
|
||||||
|
output_string = input_string
|
||||||
|
input_string.scan(/{{(\w*)}}/).each do |var|
|
||||||
|
output_string.gsub!("{{#{var[0]}}}", fetch(var[0].to_sym))
|
||||||
|
end
|
||||||
|
output_string
|
||||||
|
end
|
||||||
14
lib/capistrano/tasks/check_revision.cap
Normal file
14
lib/capistrano/tasks/check_revision.cap
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
namespace :deploy do
|
||||||
|
desc "checks whether the currently checkout out revision matches the
|
||||||
|
remote one we're trying to deploy from"
|
||||||
|
task :check_revision do
|
||||||
|
branch = fetch(:branch)
|
||||||
|
unless `git rev-parse HEAD` == `git rev-parse #{branch}`
|
||||||
|
puts "WARNING: HEAD is not the same as #{branch}"
|
||||||
|
puts "Run `git push` to sync changes or make sure you've"
|
||||||
|
puts "checked out the branch: #{branch} as you can only deploy"
|
||||||
|
puts "if you've got the target branch checked out"
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
17
lib/capistrano/tasks/compile_assets_locally.cap
Normal file
17
lib/capistrano/tasks/compile_assets_locally.cap
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
namespace :deploy do
|
||||||
|
desc "compiles assets locally then rsyncs"
|
||||||
|
task :compile_assets_locally do
|
||||||
|
run_locally do
|
||||||
|
execute "RAILS_ENV=#{fetch(:rails_env)} bundle exec rake assets:precompile"
|
||||||
|
end
|
||||||
|
on roles(:app) do |role|
|
||||||
|
run_locally do
|
||||||
|
execute"rsync -av ./public/assets/ #{role.user}@#{role.hostname}:#{release_path}/public/assets/;"
|
||||||
|
end
|
||||||
|
sudo "chmod -R 755 #{release_path}/public/assets/"
|
||||||
|
end
|
||||||
|
run_locally do
|
||||||
|
execute "rm -rf ./public/assets"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
14
lib/capistrano/tasks/logs.cap
Normal file
14
lib/capistrano/tasks/logs.cap
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
namespace :logs do
|
||||||
|
task :tail, :file do |t, args|
|
||||||
|
if args[:file]
|
||||||
|
on roles(:app) do
|
||||||
|
execute "tail -f #{shared_path}/log/#{args[:file]}.log"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
puts "please specify a logfile e.g: 'rake logs:tail[logfile]"
|
||||||
|
puts "will tail 'shared_path/log/logfile.log'"
|
||||||
|
puts "remember if you use zsh you'll need to format it as:"
|
||||||
|
puts "rake 'logs:tail[logfile]' (single quotes)"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
10
lib/capistrano/tasks/monit.cap
Normal file
10
lib/capistrano/tasks/monit.cap
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace :monit do
|
||||||
|
%w(start stop restart).each do |task_name|
|
||||||
|
desc "#{task_name} Monit"
|
||||||
|
task task_name do
|
||||||
|
on roles(:app), in: :sequence, wait: 5 do
|
||||||
|
sudo "service monit #{task_name}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
22
lib/capistrano/tasks/nginx.cap
Normal file
22
lib/capistrano/tasks/nginx.cap
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
namespace :nginx do
|
||||||
|
%w(start stop restart reload).each do |task_name|
|
||||||
|
desc "#{task } Nginx"
|
||||||
|
task task_name do
|
||||||
|
on roles(:app), in: :sequence, wait: 5 do
|
||||||
|
sudo "/etc/init.d/nginx #{task_name}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "Remove default Nginx Virtual Host"
|
||||||
|
task "remove_default_vhost" do
|
||||||
|
on roles(:app) do
|
||||||
|
if test("[ -f /etc/nginx/sites-enabled/default ]")
|
||||||
|
sudo "rm /etc/nginx/sites-enabled/default"
|
||||||
|
puts "removed default Nginx Virtualhost"
|
||||||
|
else
|
||||||
|
puts "No default Nginx Virtualhost to remove"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
10
lib/capistrano/tasks/restart.cap
Normal file
10
lib/capistrano/tasks/restart.cap
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace :deploy do
|
||||||
|
desc 'Commands for unicorn application'
|
||||||
|
%w(start stop force-stop restart upgrade reopen-logs).each do |command|
|
||||||
|
task command.to_sym do
|
||||||
|
on roles(:app), in: :sequence, wait: 5 do
|
||||||
|
sudo "/etc/init.d/unicorn_#{fetch(:full_app_name)} #{command}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
18
lib/capistrano/tasks/run_tests.cap
Normal file
18
lib/capistrano/tasks/run_tests.cap
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
namespace :deploy do
|
||||||
|
desc "Runs test before deploying, can't deploy unless they pass"
|
||||||
|
task :run_tests do
|
||||||
|
test_log = "log/capistrano.test.log"
|
||||||
|
tests = fetch(:tests)
|
||||||
|
tests.each do |test|
|
||||||
|
puts "--> Running tests: '#{test}', please wait ..."
|
||||||
|
unless system "bundle exec rspec #{test} > #{test_log} 2>&1"
|
||||||
|
puts "--> Tests: '#{test}' failed. Results in: #{test_log} and below:"
|
||||||
|
system "cat #{test_log}"
|
||||||
|
exit;
|
||||||
|
end
|
||||||
|
puts "--> '#{test}' passed"
|
||||||
|
end
|
||||||
|
puts "--> All tests passed"
|
||||||
|
system "rm #{test_log}"
|
||||||
|
end
|
||||||
|
end
|
||||||
33
lib/capistrano/tasks/setup_config.cap
Normal file
33
lib/capistrano/tasks/setup_config.cap
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
namespace :deploy do
|
||||||
|
task :setup_config do
|
||||||
|
on roles(:app) do
|
||||||
|
# make the config dir
|
||||||
|
execute :mkdir, "-p #{shared_path}/config"
|
||||||
|
full_app_name = fetch(:full_app_name)
|
||||||
|
|
||||||
|
# config files to be uploaded to shared/config, see the
|
||||||
|
# definition of smart_template for details of operation.
|
||||||
|
# Essentially looks for #{filename}.erb in deploy/#{full_app_name}/
|
||||||
|
# and if it isn't there, falls back to deploy/#{shared}. Generally
|
||||||
|
# everything should be in deploy/shared with params which differ
|
||||||
|
# set in the stage files
|
||||||
|
config_files = fetch(:config_files)
|
||||||
|
config_files.each do |file|
|
||||||
|
smart_template file
|
||||||
|
end
|
||||||
|
|
||||||
|
# which of the above files should be marked as executable
|
||||||
|
executable_files = fetch(:executable_config_files)
|
||||||
|
executable_files.each do |file|
|
||||||
|
execute :chmod, "+x #{shared_path}/config/#{file}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# symlink stuff which should be... symlinked
|
||||||
|
symlinks = fetch(:symlinks)
|
||||||
|
|
||||||
|
symlinks.each do |symlink|
|
||||||
|
sudo "ln -nfs #{shared_path}/config/#{symlink[:source]} #{sub_strings(symlink[:link])}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
32
lib/capistrano/template.rb
Normal file
32
lib/capistrano/template.rb
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# will first try and copy the file:
|
||||||
|
# config/deploy/#{full_app_name}/#{from}.erb
|
||||||
|
# to:
|
||||||
|
# shared/config/to
|
||||||
|
# if the original source path doesn exist then it will
|
||||||
|
# search in:
|
||||||
|
# config/deploy/shared/#{from}.erb
|
||||||
|
# this allows files which are common to all enviros to
|
||||||
|
# come from a single source while allowing specific
|
||||||
|
# ones to be over-ridden
|
||||||
|
# if the target file name is the same as the source then
|
||||||
|
# the second parameter can be left out
|
||||||
|
def smart_template(from, to=nil)
|
||||||
|
to ||= from
|
||||||
|
full_to_path = "#{shared_path}/config/#{to}"
|
||||||
|
if from_erb_path = template_file(from)
|
||||||
|
from_erb = StringIO.new(ERB.new(File.read(from_erb_path)).result(binding))
|
||||||
|
upload! from_erb, full_to_path
|
||||||
|
info "copying: #{from_erb} to: #{full_to_path}"
|
||||||
|
else
|
||||||
|
error "error #{from} not found"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def template_file(name)
|
||||||
|
if File.exist?((file = "config/deploy/#{fetch(:full_app_name)}/#{name}.erb"))
|
||||||
|
return file
|
||||||
|
elsif File.exist?((file = "config/deploy/shared/#{name}.erb"))
|
||||||
|
return file
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user