add loader service api
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
class Api::ApiController < ActionController::API
|
||||
include TokenVerification
|
||||
include ActionController::MimeResponds
|
||||
|
||||
# before_action :lookup_domain
|
||||
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)
|
||||
end
|
||||
|
||||
# def lookup_domain
|
||||
# if request.subdomain.present? && request.subdomain != "www"
|
||||
# from = request.subdomain.downcase + "." + request.domain.downcase
|
||||
# def lookup_domain
|
||||
# if request.subdomain.present? && request.subdomain != "www"
|
||||
# from = request.subdomain.downcase + "." + request.domain.downcase
|
||||
# @license = cache_license(ENV["SX_PROVISION_URL"], from) # request.subdomain.downcase
|
||||
# if (!@license.nil?)
|
||||
# logger.info "Location - " + @license.dbhost
|
||||
# ActiveRecord::Base.establish_connection(website_connection(@license))
|
||||
# # authenticate_session_token
|
||||
# logger.info "Location - " + @license.dbhost
|
||||
# ActiveRecord::Base.establish_connection(website_connection(@license))
|
||||
# # authenticate_session_token
|
||||
# # logger.info "Connecting to - " + @license.subdomain + " - "+ @license.dbhost + "@" + @license.dbschema
|
||||
# else
|
||||
# # reconnect_default_db
|
||||
# logger.info 'License is nil'
|
||||
# # redirect_to root_url(:host => request.domain) + "store_error"
|
||||
# render :json => [{ status: false, message: 'Invalid Access!'}]
|
||||
# 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,
|
||||
# :username => license.dbusername, :password => license.dbpassword)
|
||||
# end
|
||||
@@ -55,8 +56,8 @@ class Api::ApiController < ActionController::API
|
||||
# @default_config ||= ActiveRecord::Base.connection.instance_variable_get("@config").dup
|
||||
# end
|
||||
|
||||
# def cache_license(url, lookup)
|
||||
# @license = License.new(url, lookup)
|
||||
# def cache_license(url, lookup)
|
||||
# @license = License.new(url, lookup)
|
||||
|
||||
# if (@license.detail_with_local_cache(lookup) == true)
|
||||
# return @license
|
||||
|
||||
@@ -40,7 +40,7 @@ class Api::AuthenticateController < Api::ApiController
|
||||
@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
|
||||
@status = false
|
||||
@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
|
||||
@@ -2861,7 +2861,7 @@ def self.get_hourly_item_query(type)
|
||||
"i.status as status_type,i.remark as remark,"+
|
||||
"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, " +
|
||||
|
||||
|
||||
"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")
|
||||
|
||||
@@ -2885,6 +2885,139 @@ def grand_total_round
|
||||
self.grand_total =self.grand_total.round(print_settings.precision.to_i)
|
||||
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
|
||||
|
||||
def generate_custom_id
|
||||
|
||||
@@ -275,4 +275,57 @@ class SaleItem < ApplicationRecord
|
||||
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
|
||||
|
||||
@@ -117,6 +117,14 @@ scope "(:locale)", locale: /en|mm/ do
|
||||
|
||||
#API for sync cloud
|
||||
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
|
||||
|
||||
#--------- Cashier ------------#
|
||||
|
||||
Reference in New Issue
Block a user