From b3ab99996210fbee83680614ab915e505d010f4f Mon Sep 17 00:00:00 2001 From: NyanLinHtut Date: Fri, 21 Aug 2020 11:24:10 +0630 Subject: [PATCH] fixed receipt bill pdf with action cable --- .../origami/payments_controller.rb | 53 ++----- app/models/printer/order_queue_printer.rb | 8 +- app/models/printer/printer_worker.rb | 24 ++-- app/models/printer/receipt_printer.rb | 136 ++++++++---------- app/views/origami/payments/show.html.erb | 42 +++--- 5 files changed, 112 insertions(+), 151 deletions(-) diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 8b5416cf..22c25e85 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -132,14 +132,6 @@ class Origami::PaymentsController < BaseOrigamiController ) end - # For Print - # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server - if Lookup.collection_of("print_settings").any? { |x| x == ["ReceiptBillA5Pdf", "1"] } #print_settings with name:ReceiptBillA5Pdf - unique_code = "ReceiptBillA5Pdf" - else - unique_code = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first.unique_code - end - customer = saleObj.customer # get member information @@ -197,12 +189,17 @@ class Origami::PaymentsController < BaseOrigamiController card_balance_amount = SaleAudit.getCardBalanceAmount(sale_id) # get printer info - print_settings = PrintSetting.find_by_unique_code(unique_code) + if type.strip.downcase == 'doemal_order' + print_settings = PrintSetting.where(unique_code: 'ReceiptBillOrderPdf').first + else + print_settings = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first + end # Calculate Food and Beverage Total item_price_by_accounts = SaleItem.calculate_price_by_accounts(saleObj.sale_items) discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items) other_amount = SaleItem.calculate_other_charges(sale_items) credit_pdf = Lookup.find_by_lookup_type("credit_pdf") + if (path.include? ("credit_payment")) && !credit_pdf.nil? && credit_pdf.value.to_i == 1 printed_status = 'credit_payment' else @@ -211,13 +208,10 @@ class Origami::PaymentsController < BaseOrigamiController printer = Printer::ReceiptPrinter.new(print_settings) filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings, false, nil, cashier_terminal,sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_detail, printed_status,current_balance,card_data,other_amount,latest_order_no,card_balance_amount,nil) - - #end - - if !saleObj.nil? - # InventoryJob.perform_now(self.id) - # InventoryDefinition.calculate_product_count(saleObj) - end + # if !saleObj.nil? + # InventoryJob.perform_now(self.id) + # InventoryDefinition.calculate_product_count(saleObj) + # end end # status, filename, sale_receipt_no, printer_name = Payment.pay(getCloudDomain, cash, sale_id, member_info, type, tax_type, path, latest_order_no, shop_detail, current_user, nil, nil) @@ -610,32 +604,11 @@ class Origami::PaymentsController < BaseOrigamiController cashier_type = params[:type] if cashier_type.strip.downcase == "doemal_order" - unique_code = "ReceiptBillOrderPdf" + print_settings = PrintSetting.where(unique_code: 'ReceiptBillOrderPdf').first else - receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf - unique_code = "ReceiptBillPdf" - print_settings = PrintSetting.all - if !print_settings.nil? - print_settings.each do |setting| - if setting.unique_code == 'ReceiptBillPdf' - unique_code = "ReceiptBillPdf" - elsif setting.unique_code == 'ReceiptBillStarPdf' - unique_code = "ReceiptBillStarPdf" - end - end - end - if !receipt_bill_a5_pdf.empty? - receipt_bill_a5_pdf.each do |receipt_bilA5| - if receipt_bilA5[0] == 'ReceiptBillA5Pdf' - if receipt_bilA5[1] == '1' - unique_code = "ReceiptBillA5Pdf" - # else - # unique_code = "ReceiptBillPdf" - end - end - end - end + print_settings = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first end + # get printer info print_settings = PrintSetting.find_by_unique_code(unique_code) printer = Printer::ReceiptPrinter.new(print_settings) diff --git a/app/models/printer/order_queue_printer.rb b/app/models/printer/order_queue_printer.rb index 5a145efc..53f29479 100755 --- a/app/models/printer/order_queue_printer.rb +++ b/app/models/printer/order_queue_printer.rb @@ -26,8 +26,6 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker if ENV["SERVER_MODE"] != "cloud" self.print(filename, oqs.printer_name) end - - return filename, order_id, oqs.printer_name else ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", queue: oqs.station_name, @@ -41,6 +39,8 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker } ) end + + return filename, order_id, oqs.printer_name end # Query for per order @@ -71,8 +71,6 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker if ENV["SERVER_MODE"] != "cloud" self.print(filename, oqs.printer_name) end - - return filename, order_id, oqs.printer_name else ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", queue: oqs.station_name, @@ -87,6 +85,8 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker } ) end + + return filename, order_id, oqs.printer_name end # Print for orders in booking diff --git a/app/models/printer/printer_worker.rb b/app/models/printer/printer_worker.rb index 4dc057b9..d30af42d 100755 --- a/app/models/printer/printer_worker.rb +++ b/app/models/printer/printer_worker.rb @@ -42,17 +42,17 @@ class Printer::PrinterWorker end def print(file_path, printer_destination = nil ) - # if printer_destination.nil? - # printer_destination = self.printer_destination - # end - # - # copy = self.print_copies - # #Print only when printer information is not null - # if !self.printer_destination.nil? - # (1..copy).each do - # page = Cups::PrintJob.new(file_path, printer_destination) - # page.print - # end - # end + if printer_destination.nil? + printer_destination = self.printer_destination + end + + copy = self.print_copies + #Print only when printer information is not null + if !self.printer_destination.nil? + (1..copy).each do + page = Cups::PrintJob.new(file_path, printer_destination) + page.print + end + end end end diff --git a/app/models/printer/receipt_printer.rb b/app/models/printer/receipt_printer.rb index 360ca85c..356ba825 100755 --- a/app/models/printer/receipt_printer.rb +++ b/app/models/printer/receipt_printer.rb @@ -95,82 +95,70 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Use CUPS service #Generate PDF #Print - if printer_settings - if !printer_settings.unique_code.match?(/receiptbillorder/i) - if Lookup.collection_of("print_settings").any? { |x| x == ["ReceiptBillA5Pdf", "1"] } #print_settings with name:ReceiptBillA5Pdf - pdf = ReceiptBillA5Pdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) - else - pdf = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first.unique_code.constantize.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) - end + if !printer_settings.unique_code.match?(/receiptbillorder/i) + if Lookup.collection_of("print_settings").any? { |x| x == ["ReceiptBillA5Pdf", "1"] } #print_settings with name:ReceiptBillA5Pdf + pdf = ReceiptBillA5Pdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) else - #doemal online order pdf template - pdf = ReceiptBillOrderPdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount,order_reservation) + pdf = PrintSetting.where("unique_code REGEXP ?", "receipt.*bill.*pdf").first.unique_code.constantize.new(printer_settings, kbz_pay_status, qr_code, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount) end - - # print as print copies in printer setting - count = printer_settings.print_copies + else + #doemal online order pdf template + pdf = ReceiptBillOrderPdf.new(printer_settings, sale_items, sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details,printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount,order_reservation) end + # print as print copies in printer setting + count = printer_settings.print_copies + directory_name = 'public/receipts' Dir.mkdir(directory_name) unless File.exists?(directory_name) Rails.logger.debug "############## dir::" + directory_name - if count == 1 - filename = directory_name + "/receipt_bill_#{sale_data.receipt_no}.pdf" - pdf.render_file filename - if printed_status != 'Paid' && printed_status != 'credit_payment' - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(directory_name + "/receipt_bill_#{sale_data.receipt_no}.pdf", cashier_terminal.printer_name) - end - elsif printed_status == 'credit_payment' - filename = directory_name + "/receipt_bill_credit_#{sale_data.receipt_no}.pdf" - pdf.render_file filename - self.print(directory_name + "/receipt_bill_credit_#{sale_data.receipt_no}.pdf", cashier_terminal.printer_name) - end - else - filename = directory_name + "/receipt_bill_#{sale_data.receipt_no}_#{count}.pdf" - pdf.render_file filename - if printed_status != 'Paid' - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(directory_name + "/receipt_bill_#{sale_data.receipt_no}_#{count}.pdf", cashier_terminal.printer_name) - end + + filename = "#{directory_name}/receipt_bill_#{sale_data.receipt_no}#{count != 1 ? "_#{count}" : ''}.pdf" + pdf.render_file filename + if !Lookup.where(lookup_type: "ReceiptPdfView").pluck(:value).include?('1') + #no print in cloud server + puts "SERVER_MODE #{ENV["SERVER_MODE"]}" + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, cashier_terminal.printer_name) end end Rails.logger.debug "############## filename::" + filename - return filename, sale_data.receipt_no, cashier_terminal.printer_name else - ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", - queue: cashier_terminal.printer_name, - unique_code: print_settings.unique_code, - print_copies: print_settings.print_copies, - data: { - shop_details: shop_details.as_json, - body: { sale_data: sale_data, - booking: sale_data.bookings, - dining_facility: sale_data.bookings[0].dining_facility.as_json(methods: :type), - sale_taxes: sale_data.sale_taxes, - latest_order_no: latest_order_no, - sale_items: sale_items, - precision: print_settings.precision, - delimiter: print_settings.delimiter, - member_info: member_info, - customer_name: customer_name, - rebate_amount: rebate_amount, - current_balance: balance, - card_data: card_data, - card_balance_amount: card_balance_amount, - discount_price_by_accounts: discount_price_by_accounts, - item_price_by_accounts: item_price_by_accounts, - sale_payments: sale_data.sale_payments - }, - footer: { - printed_status: printed_status, footer_text: "Thank You! See you Again" + if !Lookup.where(lookup_type: "ReceiptPdfView").pluck(:value).include?('1') + ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", + queue: cashier_terminal.printer_name, + unique_code: print_settings.unique_code, + print_copies: print_settings.print_copies, + data: { + shop_details: shop_details.as_json, + body: { sale_data: sale_data, + booking: sale_data.bookings, + dining_facility: sale_data.booking.dining_facility.as_json(methods: :type), + sale_taxes: sale_data.sale_taxes, + latest_order_no: latest_order_no, + sale_items: sale_items, + precision: print_settings.precision, + delimiter: print_settings.delimiter, + member_info: member_info, + customer_name: customer_name, + rebate_amount: rebate_amount, + current_balance: balance, + card_data: card_data, + card_balance_amount: card_balance_amount, + discount_price_by_accounts: discount_price_by_accounts, + item_price_by_accounts: item_price_by_accounts, + sale_payments: sale_data.sale_payments + }, + footer: { + printed_status: printed_status, footer_text: "Thank You! See you Again" + } } - } - ) + ) + end end + + return filename || '', sale_data.receipt_no, cashier_terminal.printer_name end # stock check @@ -266,18 +254,18 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker # if count == 0 # self.print(filename, printer_name) # else - if count == 1 - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, printer_name) - end - else - filename = "public/receipts/receipt_bill_#{receipt_no}_#{count}.pdf" - # no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, printer_name) - end - end + if count == 1 + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, printer_name) + end + else + filename = "public/receipts/receipt_bill_#{receipt_no}_#{count}.pdf" + # no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, printer_name) + end + end # end end diff --git a/app/views/origami/payments/show.html.erb b/app/views/origami/payments/show.html.erb index 39f4fa49..20bf09e2 100755 --- a/app/views/origami/payments/show.html.erb +++ b/app/views/origami/payments/show.html.erb @@ -726,6 +726,7 @@ $(document).ready(function(){ data: "cash="+ cash + "&sale_id=" + sale_id + "&type=" + cashier_type + "&tax_type=" + tax_type + "&is_kbz=" + is_kbz, success:function(result){ /* start delete receipt no in first bill*/ + console.log(result); if(($("#receipt_no").html()!=undefined) && ($("#receipt_no").html()!="")){ var receipt_no = ($("#receipt_no").html()).trim(); deleteReceiptNoInFirstBillData(receipt_no); @@ -740,33 +741,29 @@ $(document).ready(function(){ var msg = ''; } - $("#loading_wrapper" ).hide(); - if(location.pathname.includes("credit_payment")){ + $("#changed_amount").text(""); + if($('#balance').text() < 0){ + <% if precision.to_i > 0 %> + $("#changed_amount").text('Changed amount ' + parseFloat($('#balance').text() * (-1)).toFixed(<%= precision %>)); + <% else %> + $("#changed_amount").text('Changed amount ' + parseFloat($('#balance').text() * (-1))); + <% end %> + } + + if(location.pathname.includes("credit_payment") || pdf_view != 1){ payment_success_alert(); - }else{ - //PDF lightbox data - var pdfPath = "/en/pdfjs/minimal?file=" + result.filename.substring(6); + } else { + //PDF lightbox data; + var pdfPath = "/en/pdfjs/minimal?file=" + result.filename.substring(6) $("#sale_receipt_no").val(result.receipt_no); $("#filename").val(result.filename); $("#printer_name").val(result.printer_name); $("#receipt_pdf").attr("src", pdfPath); - $("#changed_amount").text(""); - if($('#balance').text() < 0){ - <% if precision.to_i > 0 %> - $("#changed_amount").text('Changed amount ' + parseFloat($('#balance').text() * (-1)).toFixed(<%= precision %>)); - <% else %> - $("#changed_amount").text('Changed amount ' + parseFloat($('#balance').text() * (-1))); - <% end %> - } - - if (pdf_view == 1) { - $("#pdfModal").modal({show : true, backdrop : false, keyboard : false}); - $("#pdfModalLabel").text("Sale Completed"); - }else{ - //PDF lightbox data - print_receipt(); - } + $("#pdfModal").modal({show : true, backdrop : false, keyboard : false}); + $("#pdfModalLabel").text("Sale Completed"); } + + $("#loading_wrapper").hide(); } }); } @@ -1010,6 +1007,7 @@ $(document).ready(function(){ if($('#pay').is(":visible")) { $('#pay').prop("disabled",true); } + $("#loading_wrapper" ).show(); var sale_id = $('#sale_id').text(); var filename = $("#filename").val(); @@ -1048,6 +1046,8 @@ $(document).ready(function(){ }else{ payment_success_alert(); } + + $("#loading_wrapper" ).hide(); } }); }