diff --git a/app/controllers/origami/credit_payments_controller.rb b/app/controllers/origami/credit_payments_controller.rb index 6a885f7b..05faf4f7 100755 --- a/app/controllers/origami/credit_payments_controller.rb +++ b/app/controllers/origami/credit_payments_controller.rb @@ -48,4 +48,30 @@ class Origami::CreditPaymentsController < BaseOrigamiController end end + def create_credit_payment + arr_sale = JSON.parse(params[:data]) + if !ShiftSale.current_shift.nil? + if !arr_sale.nil? + arr_sale.each do |arr_sale| + arr_sale.each do |sale| + if(Sale.exists?(sale[0])) + saleObj = Sale.find(sale[0]) + remark = "credit note payment for Receipt No #{saleObj.receipt_no}" + sale_payment = SalePayment.new + @status, @sale = sale_payment.process_payment(saleObj, current_user, sale[1], "cash", remark, true) + end + end + end + end + if @status + render :json => {status: true} + else + render :json => {status: false, message: 'Some error occurred!'} + end + else + render :json => {status: false, message: 'No current shift open for this employee!'} + end + + end + end diff --git a/app/controllers/reports/credit_payment_controller.rb b/app/controllers/reports/credit_payment_controller.rb index ccd2b0b5..7a83474d 100755 --- a/app/controllers/reports/credit_payment_controller.rb +++ b/app/controllers/reports/credit_payment_controller.rb @@ -2,6 +2,7 @@ class Reports::CreditPaymentController < BaseReportController authorize_resource :class => false def index @filter_for_credit = [['All',''],['Paid','paid'],['Unpaid','unpaid']] + @sources = [["All",''], ["Cashier","cashier"],["Quick Service","quick_service"],["Online Order","doemal_order"]] from, to = get_date_range_from_params @shift_sale_range = Sale.get_by_shift_sale_by_item(from,to,Sale::SALE_STATUS_COMPLETED) @@ -18,7 +19,8 @@ authorize_resource :class => false end @filter = params[:filter_check] - @sale_data = Sale.get_by_shift_sale_credit_payment(@shift_sale_range,@shift,from,to,@filter) + @order_source = params[:order_source] + @sale_data = Sale.get_by_shift_sale_credit_payment(@shift_sale_range,@shift,from,to,@filter,@order_source) @from = from @to = to diff --git a/app/controllers/transactions/credit_notes_controller.rb b/app/controllers/transactions/credit_notes_controller.rb index 27f52f12..f7070e8d 100755 --- a/app/controllers/transactions/credit_notes_controller.rb +++ b/app/controllers/transactions/credit_notes_controller.rb @@ -6,27 +6,34 @@ class Transactions::CreditNotesController < ApplicationController # GET /transactions/sales # GET /transactions/sales.json def index - + @sources = [["All",''], ["Cashier","cashier"],["Quick Service","quick_service"],["Online Order","doemal_order"]] @customers = Customer.all - filter = params[:filter] - customer = params[:customer] - from = params[:from] - to = params[:to] - - if filter.nil? && from.nil? && to.nil? && customer.nil? - @credit_notes = Sale.where('payment_status = ?', Sale::SALE_STATUS_OUTSTANDING) - @credit_notes = Kaminari.paginate_array(@credit_notes).page(params[:page]).per(20) - else - sale = Sale.search_credit_sales(customer,filter,from,to) - if sale.count > 0 - @credit_notes = sale - @credit_notes = Kaminari.paginate_array(@credit_notes).page(params[:page]).per(20) - else - @credit_notes = 0 - end - end + filter = params[:filter] + customer = params[:customer] + from = params[:from] + to = params[:to] + order_source = params[:order_source] + if filter.nil? && from.nil? && to.nil? && customer.nil? && order_source.nil? + @credit_notes = Sale.select("sales.*, orders.source") + .joins("JOIN sale_payments sp on sp.sale_id = sales.sale_id") + .where("(CASE WHEN (sales.grand_total + sales.amount_changed)=(select SUM(sale_payments.payment_amount) + FROM sale_payments WHERE sale_payments.sale_id=sales.sale_id AND sale_payments.payment_method!='creditnote') + THEN NULL ELSE payment_method='creditnote' END)") + .joins(" JOIN bookings ON bookings.sale_id=sales.sale_id") + .joins(" JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") + .joins(" JOIN orders ON orders.order_id=booking_orders.order_id") + @credit_notes = Kaminari.paginate_array(@credit_notes).page(params[:page]).per(20) + else + sale = Sale.search_credit_sales(customer,filter,from,to,order_source) + if !sale.nil? + @credit_notes = sale + @credit_notes = Kaminari.paginate_array(@credit_notes).page(params[:page]).per(20) + else + @credit_notes = 0 + end + end respond_to do |format| format.html # index.html.erb format.json { render json: @credit_notes } diff --git a/app/models/order_reservation.rb b/app/models/order_reservation.rb index 2eceb8de..e2db107f 100644 --- a/app/models/order_reservation.rb +++ b/app/models/order_reservation.rb @@ -64,6 +64,7 @@ class OrderReservation < ApplicationRecord order_reservation.transaction_ref = order_reserve[:reference] if order_reserve[:order_info] order_reservation.item_count = order_reserve[:order_info][:items].count + order_reservation.payment_methods = order_reserve[:payment_info][:payment_methods].to_json order_reservation.payment_type = order_reserve[:payment_info][:payment_type] order_reservation.payment_status = order_reserve[:payment_info][:payment_status] order_reservation.payment_ref = order_reserve[:payment_info][:payment_ref] @@ -164,8 +165,12 @@ class OrderReservation < ApplicationRecord #end rounding adjustment sale_payment = SalePayment.new - sale_payment.process_payment(saleObj, current_user, saleObj.grand_total, "cash") - + if(order.payment_type == "COD") + sale_payment.process_payment(saleObj, current_user, saleObj.grand_total, "cash") + else + remark = "credit payment for Receipt No #{saleObj.receipt_no}" + @status, @sale = sale_payment.process_payment(saleObj, current_user, saleObj.grand_total, "creditnote", remark) + end #order status send to doemal callback_response = send_status_to_ordering(order.callback_url,order.transaction_ref,DELIVERED) #order reservation status updated diff --git a/app/models/sale.rb b/app/models/sale.rb index 645e52d1..f440eb2f 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -737,7 +737,7 @@ class Sale < ApplicationRecord end - def self.search_credit_sales(customer,filter,from,to) + def self.search_credit_sales(customer,filter,from,to,order_source="") if filter.blank? keyword = '' else @@ -750,12 +750,30 @@ class Sale < ApplicationRecord custo = "and customer_id = '#{customer}'" end - if from.present? && to.present? - sale = Sale.all.joins("JOIN sale_payments sp on sp.sale_id = sales.sale_id") - .where("DATE_FORMAT(receipt_date,'%d-%m-%Y') >= ?" + " AND DATE_FORMAT(receipt_date,'%d-%m-%Y') <= ? and sp.payment_method = 'creditnote' #{keyword} #{custo}", from,to) + if order_source.blank? + source = "" else - sale = Sale.all.joins("JOIN sale_payments sp on sp.sale_id = sales.sale_id") - .where("sp.payment_method ='creditnote' #{keyword} #{custo}") + if order_source == "cashier" + source = "and orders.source='cashier' or orders.source='emenu'" + else + source = "and orders.source='#{order_source}'" + end + end + + if from.present? && to.present? + sale = Sale.select("sales.*,orders.source").joins("JOIN sale_payments sp on sp.sale_id = sales.sale_id") + .joins(" JOIN bookings ON bookings.sale_id=sales.sale_id") + .joins(" JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") + .joins(" JOIN orders ON orders.order_id=booking_orders.order_id") + .where("DATE_FORMAT(receipt_date,'%d-%m-%Y') >= ?" + " AND DATE_FORMAT(receipt_date,'%d-%m-%Y') <= ? and (CASE WHEN (sales.grand_total + sales.amount_changed)=(select SUM(sale_payments.payment_amount) + FROM sale_payments WHERE sale_payments.sale_id=sales.sale_id AND sale_payments.payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' END) #{keyword} #{custo} #{source}", from,to) + else + sale = Sale.select("sales.*,orders.source").joins(" JOIN sale_payments sp on sp.sale_id = sales.sale_id") + .joins(" JOIN bookings ON bookings.sale_id=sales.sale_id") + .joins(" JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") + .joins(" JOIN orders ON orders.order_id=booking_orders.order_id") + .where("(CASE WHEN (sales.grand_total + sales.amount_changed)=(select SUM(sale_payments.payment_amount) + FROM sale_payments WHERE sale_payments.sale_id=sales.sale_id AND sale_payments.payment_method!='creditnote') THEN NULL ELSE payment_method='creditnote' END) #{keyword} #{custo} #{source}") end end @@ -1186,7 +1204,7 @@ def self.get_shift_sales_by_receipt_no_detail(shift_sale_range,shift,from,to,pay return query end -def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter) +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 THEN DATE_FORMAT(CONVERT_TZ(sale_payments.created_at,'+00:00','+06:30'),'%d %b %y %h:%i%p') ELSE '-' END) FROM `sale_payments` @@ -1223,10 +1241,19 @@ def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter) 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 - + if order_source.blank? + source = "" + else + if order_source == "cashier" + source = "and orders.source='cashier' or orders.source='emenu'" + else + source = "and orders.source='#{order_source}'" + end + end query = SalePayment.select("s.receipt_no, sale_payments.*, SUM(sale_payments.payment_amount) as payment_amount, s.receipt_date as sale_date, + orders.source as order_source, s.cashier_name as cashier_name, (#{sub_query}) as credit_payment_receipt_date, (#{sub_query1}) as credit_payment, @@ -1234,13 +1261,16 @@ def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter) (#{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") + .joins("INNER JOIN bookings ON bookings.sale_id=s.sale_id") + .joins("INNER JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") + .joins("INNER JOIN orders ON orders.order_id=booking_orders.order_id") if shift.present? - query = query.where("sale_payments.payment_method= 'creditnote' and s.sale_status = 'completed' #{filter_check} and s.shift_sale_id in (?)",shift.to_a) + 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) 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 (?)",shift_sale_range.to_a) + 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) else - query = query.where("sale_payments.payment_method='creditnote' and s.sale_status = 'completed' #{filter_check} and s.receipt_date between ? and ? ",from,to) + query = query.where("sale_payments.payment_method='creditnote' and s.sale_status = 'completed' #{filter_check} and s.receipt_date between ? and ? #{source}",from,to) end query = query.group("s.sale_id") end diff --git a/app/views/reports/credit_payment/_shift_sale_report_filter.html.erb b/app/views/reports/credit_payment/_shift_sale_report_filter.html.erb index 8c0c83bd..22ae03ce 100755 --- a/app/views/reports/credit_payment/_shift_sale_report_filter.html.erb +++ b/app/views/reports/credit_payment/_shift_sale_report_filter.html.erb @@ -24,6 +24,10 @@ <%= select_tag "filter_check", options_for_select(@filter_for_credit, :selected => params[:filter_check]), :class => "form-control", :style => "height: 37px;" %> <% end %> +
| <%= t("views.right_panel.detail.sale_id") %> | -<%= t("views.right_panel.detail.receipt_no") %> | -<%= t("views.right_panel.detail.credit_amount") %> | -<%= t :cashier %> | -<%= t :customer %> <%= t("views.right_panel.detail.name") %> | -<%= t("views.right_panel.detail.receipt_date") %> | -||
|---|---|---|---|---|---|---|---|
| <%= link_to sale.sale_id, transactions_sale_path(sale) %> | -<%= sale.receipt_no %> | -<%credit = SalePayment.where('sale_id = ? AND payment_method=?', sale.sale_id,"creditnote").first %> - <%= credit.payment_amount rescue '-' %> - | -<%= sale.cashier_name rescue '-' %> | -<%= link_to sale.customer.name, crm_customer_path(sale.customer_id) %> | -<%= sale.receipt_date.strftime("%d-%m-%Y %I:%M %p") %> | -||
| <% end %> - <% else %> - | |||||||
|---|---|---|---|---|---|---|---|
<%= t("views.right_panel.detail.no_data_txt") %>.... | |||||||
<%= t("views.right_panel.detail.no_data_txt") %>....