diff --git a/Gemfile b/Gemfile index 4cb09746..f5b13b2a 100644 --- a/Gemfile +++ b/Gemfile @@ -19,7 +19,7 @@ gem 'pg' gem 'mysql2', '~> 0.5.2' #Use PosgreSQL - +gem "select2-rails" # redis server for cable gem 'redis', '~> 3.0' diff --git a/Gemfile.lock b/Gemfile.lock index 4aa2614b..56470331 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,8 +1,8 @@ GIT remote: https://github.com/capistrano/rbenv.git - revision: 5e5d655e9b4820adebefb58f760e8d889ed49449 + revision: 1fdb93a6dd4a4ab3fb786c995055cf6949daf7a4 specs: - capistrano-rbenv (2.1.6) + capistrano-rbenv (2.2.0) capistrano (~> 3.1) sshkit (~> 1.3) @@ -60,21 +60,21 @@ GEM axlsx_rails (0.5.2) actionpack (>= 3.1) axlsx (>= 2.0.1) - bcrypt (3.1.13) + bcrypt (3.1.15) bindex (0.8.1) builder (3.2.4) - byebug (11.1.1) + byebug (11.1.3) cancancan (1.17.0) - capistrano (3.12.1) + capistrano (3.14.1) airbrussh (>= 1.0.0) i18n rake (>= 10.0.0) sshkit (>= 1.9.0) - capistrano-bundler (1.6.0) + capistrano-bundler (2.0.1) capistrano (~> 3.1) - capistrano-rails (1.4.0) + capistrano-rails (1.6.1) capistrano (~> 3.1) - capistrano-bundler (~> 1.1) + capistrano-bundler (>= 1.1, < 3) capistrano3-puma (3.1.1) capistrano (~> 3.7) capistrano-bundler @@ -83,9 +83,9 @@ GEM activemodel (>= 4.0.0) activesupport (>= 4.0.0) mime-types (>= 1.16) - chartkick (3.3.1) + chartkick (3.4.0) chronic (0.10.2) - chunky_png (1.3.11) + chunky_png (1.3.12) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) @@ -93,12 +93,12 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.1.6) - connection_pool (2.2.2) + concurrent-ruby (1.1.7) + connection_pool (2.2.3) crass (1.0.6) cups (0.0.7) - database_cleaner (1.8.3) - diff-lcs (1.3) + database_cleaner (1.8.5) + diff-lcs (1.4.4) erubi (1.9.0) execjs (2.7.0) factory_girl (4.9.0) @@ -106,9 +106,9 @@ GEM factory_girl_rails (4.9.0) factory_girl (~> 4.9.0) railties (>= 3.0.0) - faker (2.10.2) + faker (2.13.0) i18n (>= 1.6, < 2) - ffi (1.12.2) + ffi (1.13.1) filterrific (5.2.1) font-awesome-rails (4.7.0.5) railties (>= 3.2, < 6.1) @@ -117,7 +117,7 @@ GEM htmlentities (4.3.4) httparty (0.15.7) multi_xml (>= 0.5.2) - i18n (1.8.2) + i18n (1.8.5) concurrent-ruby (~> 1.0) jbuilder (2.10.0) activesupport (>= 5.0.0) @@ -125,13 +125,13 @@ GEM actionpack (>= 3.1) railties (>= 3.1) sass (>= 3.2) - jquery-rails (4.3.5) + jquery-rails (4.4.0) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) jquery-ui-rails (6.0.1) railties (>= 3.2.16) - json (2.3.0) + json (2.3.1) kaminari (1.0.1) activesupport (>= 4.1.0) kaminari-actionview (= 1.0.1) @@ -147,48 +147,48 @@ GEM listen (3.0.8) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - loofah (2.4.0) + loofah (2.6.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) mini_mime (>= 0.1.1) material_icons (2.2.1) railties (>= 3.2) - method_source (0.9.2) + method_source (1.0.0) mime-types (3.3.1) mime-types-data (~> 3.2015) - mime-types-data (3.2019.1009) + mime-types-data (3.2020.0512) mini_magick (4.10.1) mini_mime (1.0.2) mini_portile2 (2.4.0) - minitest (5.14.0) + minitest (5.14.1) momentjs-rails (2.20.1) railties (>= 3.1) multi_xml (0.6.0) mysql2 (0.5.3) nested_form (0.3.2) - net-scp (2.0.0) - net-ssh (>= 2.6.5, < 6.0.0) - net-ssh (5.2.0) + net-scp (3.0.0) + net-ssh (>= 2.6.5, < 7.0.0) + net-ssh (6.1.0) nio4r (2.5.2) - nokogiri (1.10.9) + nokogiri (1.10.10) mini_portile2 (~> 2.4.0) - pdf-core (0.7.0) + pdf-core (0.8.1) pdfjs_viewer-rails (0.3.1) json (> 1.8.4) rails (> 4.2.0) sass-rails (~> 5.0) - pg (1.2.2) - prawn (2.2.2) - pdf-core (~> 0.7.0) - ttfunk (~> 1.5) - prawn-qrcode (0.5.1) + pg (1.2.3) + prawn (2.3.0) + pdf-core (~> 0.8.1) + ttfunk (~> 1.6) + prawn-qrcode (0.5.2) prawn (>= 1) rqrcode (>= 1.0.0) prawn-table (0.2.2) prawn (>= 1.3.0, < 3.0.0) - puma (3.12.4) - rack (2.0.9) + puma (3.12.6) + rack (2.2.3) rack-cors (1.1.1) rack (>= 2.0.0) rack-protection (2.0.8.1) @@ -219,7 +219,7 @@ GEM rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) rake (13.0.1) - rb-fsevent (0.10.3) + rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) redis (3.3.5) @@ -232,10 +232,10 @@ GEM rqrcode (1.1.2) chunky_png (~> 1.0) rqrcode_core (~> 0.1) - rqrcode_core (0.1.1) - rspec-core (3.9.1) - rspec-support (~> 3.9.1) - rspec-expectations (3.9.1) + rqrcode_core (0.1.2) + rspec-core (3.9.2) + rspec-support (~> 3.9.3) + rspec-expectations (3.9.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) rspec-mocks (3.9.1) @@ -249,7 +249,7 @@ GEM rspec-expectations (~> 3.9.0) rspec-mocks (~> 3.9.0) rspec-support (~> 3.9.0) - rspec-support (3.9.2) + rspec-support (3.9.3) ruby-ole (1.2.12.2) rubyzip (1.0.0) sass (3.7.4) @@ -265,21 +265,20 @@ GEM tilt (>= 1.1, < 3) schema_to_scaffold (0.8.0) activesupport (>= 3.2.1) - select2-rails (4.0.3) - thor (~> 0.14) + select2-rails (4.0.13) shoulda-matchers (3.1.3) activesupport (>= 4.0.0) - sidekiq (5.2.8) + sidekiq (5.2.9) connection_pool (~> 2.2, >= 2.2.2) - rack (< 2.1.0) + rack (~> 2.0) rack-protection (>= 1.5.0) - redis (>= 3.3.5, < 5) + redis (>= 3.3.5, < 4.2) simple_form (5.0.2) actionpack (>= 5.0) activemodel (>= 5.0) spreadsheet (1.2.6) ruby-ole (>= 1.0) - spring (2.1.0) + spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) @@ -295,7 +294,7 @@ GEM net-ssh (>= 2.8.0) tether-rails (1.4.0) rails (>= 3.1) - thor (0.20.3) + thor (1.0.1) thread_safe (0.3.6) tilt (2.0.10) to_xls-rails (1.3.1) @@ -304,7 +303,7 @@ GEM turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) - tzinfo (1.2.6) + tzinfo (1.2.7) thread_safe (~> 0.1) uglifier (4.2.0) execjs (>= 0.3.0, < 3) @@ -315,7 +314,7 @@ GEM railties (>= 5.0) websocket-driver (0.6.5) websocket-extensions (>= 0.1.0) - websocket-extensions (0.1.4) + websocket-extensions (0.1.5) whenever (1.0.0) chronic (>= 0.6.3) diff --git a/README.md b/README.md index 67460830..6980e6ac 100755 --- a/README.md +++ b/README.md @@ -77,6 +77,9 @@ For Using Star Printer **_ Need to change these print settings 1) settings/print_settings/unique_code => OrderItemStarPdf 2) settings/print_settings/unique_code => ReceiptBillStarPdf 3) settings/print_settings/unique_code => SaleItemsStarPdf _** Other print settings aren't need to change. +For Cloud ActionCable Print +settings/lookups => { type: print_settings, name: ActionCable, value: 1 } + For Show Sale Items Summary at CloseCashierPrint 1) settings/print_settings a) Check => Shift Sale Items diff --git a/app/assets/javascripts/OQS.js b/app/assets/javascripts/OQS.js index 68cf44d7..76413675 100755 --- a/app/assets/javascripts/OQS.js +++ b/app/assets/javascripts/OQS.js @@ -402,17 +402,17 @@ $(document).on('turbolinks:load', function() { url: '/oqs/print/print/'+assigned_item_id, data: params, success: function(result){ - // For Server Print - from jade - if ($("#server_mode").val() == "cloud") { - if(typeof code2lab != 'undefined'){ - code2lab.printFile(result.filepath.substr(6), result.printer_url); - } - } - location.reload(); - + if (!$('#print_settings').data('action-cable')) { + // For Server Print - from jade + if ($("#server_mode").val() == "cloud") { + if(typeof code2lab != 'undefined'){ + code2lab.printFile(result.filepath.substr(6), result.printer_url); + } + } + } + location.reload(); } }); - }); // Print Order Summary @@ -428,13 +428,15 @@ $(document).on('turbolinks:load', function() { url: '/oqs/print/print_order_summary/'+assigned_item_id, data: params, success: function(result){ - // For Server Print - from jade - if ($("#server_mode").val() == "cloud") { - if(typeof code2lab != 'undefined'){ - code2lab.printFile(result.filepath.substr(6), result.printer_url); - } - } - location.reload(); + if (!$('#print_settings').data('action-cable')) { + // For Server Print - from jade + if ($("#server_mode").val() == "cloud") { + if(typeof code2lab != 'undefined'){ + code2lab.printFile(result.filepath.substr(6), result.printer_url); + } + } + } + location.reload(); } }); }); diff --git a/app/assets/javascripts/order_reservation.js b/app/assets/javascripts/order_reservation.js index f74f1fa9..6c141ddc 100644 --- a/app/assets/javascripts/order_reservation.js +++ b/app/assets/javascripts/order_reservation.js @@ -1,6 +1,6 @@ //= require custom.js -$(function() { +$(function() { $("#discount").hide(); $(".expected_time").hide(); $('#accepted').hide(); @@ -11,7 +11,7 @@ $(function() { $(".accepted_time").hide(); $(".kitchen_time").hide(); $(".ready_time").hide(); - $(function() { + $(function() { $('.first-1').click(); }); @@ -213,8 +213,8 @@ $(function() { function warnBeforeRedirect(linkURL) { swal({ - title: "Alert!", - text: "Are you sure you want to close cashier?", + title: "Alert!", + text: "Are you sure you want to close cashier?", type: "warning", showCancelButton: true }, function() { @@ -278,13 +278,13 @@ function refreshDetailData(){ $("#payment_type").text(""); } -//show order list -function show_order_detail(url,sr_no){ +//show order list +function show_order_detail(url,sr_no){ // $('.summary-items').html(""); //Start Ajax - $.ajax({ - type: "GET", - url: url, + $.ajax({ + type: "GET", + url: url, data: {}, dataType: "json", success: function(data) { @@ -334,12 +334,12 @@ function show_order_detail(url,sr_no){ $("#ready_delivery_time").html(ready_time); } } - + var newDate = new Date(data.requested_time); var time = timeFormat(newDate); // var requested_date = newDate.getFullYear() + '-' + (newDate.getMonth() >= 10? newDate.getMonth() : '0' + (newDate.getMonth() + 1)) +'-'+ (newDate.getDate() >= 10? newDate.getDate() : '0' + newDate.getDate()) +' '+time; var requested_date = getOrderMonth(newDate.getMonth()) +' '+ (newDate.getDate() >= 10? newDate.getDate() : '0' + newDate.getDate()) +', '+newDate.getFullYear()+'('+getOrderDay(newDate.getDay())+')'+' '+time; - + if((data.expected_waiting_time!=undefined) && (data.expected_waiting_time!=null)){ // var expDate = new Date(data.expected_waiting_time); // var exptime = timeFormat(expDate); @@ -367,7 +367,7 @@ function show_order_detail(url,sr_no){ if(items!=undefined && items!=""){ if(items.length > 0){ - for(var i in items) { + for(var i in items) { var item_price = 0; if(items[i].price > 0){ item_price = items[i].price; @@ -378,7 +378,7 @@ function show_order_detail(url,sr_no){ var check_mobile =document.getElementsByName("summary_items_mobile")[0].value; if (check_mobile == "true"){ if(items[i].options!='[]' && items[i].options!="" && items[i].options!=null){ - row = + row = '' +''+items[i].item_name +'
' @@ -417,8 +417,8 @@ function show_order_detail(url,sr_no){ } } - - + + $('.summary-items').append(row); } @@ -452,7 +452,7 @@ function show_order_detail(url,sr_no){ }else if(data.payment_type == "dinga"){ $("#payment_type").text("DINGA"); } - + $('#ref_no').text(data.transaction_ref); $('#callback_url').text(data.callback_url); $('#order_id').text(data.order_reservation_id); @@ -494,16 +494,16 @@ function show_order_detail(url,sr_no){ }else{ $("#invoice_no").text(data["order_reservation_id"]); } - + } } } }); - //end Ajax + //end Ajax } -function callback_url(callback,ref_no,order_id,status,min_type,time,exptime,reason,approved_code){ +function callback_url(callback,ref_no,order_id,status,min_type,time,exptime,reason,approved_code){ var url = 'order_reservation/update'; var post_url = "order_reservation/send_status"; var waiting_time = ""; @@ -527,16 +527,16 @@ function callback_url(callback,ref_no,order_id,status,min_type,time,exptime,reas access_code = approved_code; } - // $.ajax({ - // type: "POST", - // url: post_url, + // $.ajax({ + // type: "POST", + // url: post_url, // data: {url: callback, ref_no: ref_no, status: status, waiting_time: waiting_time, min_type: type, reason: reject_reason}, // dataType: "json", // success: function(data) { // if(data.status){ - $.ajax({ - type: "POST", - url: url, + $.ajax({ + type: "POST", + url: url, data: {order_id: order_id, ref_no: ref_no, status: status, min_type: min_type, expected_time: waiting_time, remark: reason, access_code: access_code}, dataType: "json", success: function(data) { @@ -711,7 +711,7 @@ function getOrderDay(day){ function timeFormat(date){ var isPM = date.getHours() >= 12; var isMidday = date.getHours() == 12; - var time = [(date.getHours()>10? date.getHours() : '0'+date.getHours()) - (isPM && !isMidday ? 12 : 0), + var time = [(date.getHours()>10? date.getHours() : '0'+date.getHours()) - (isPM && !isMidday ? 12 : 0), (date.getMinutes()>10? date.getMinutes() : '0'+date.getMinutes()) || '00'].join(':') + (isPM ? ' PM' : ' AM'); return time; @@ -722,8 +722,8 @@ function timeFormat(date){ function getOnlineOrderCount(){ var count = 0; //Start Ajax - $.ajax({ - async: false, + $.ajax({ + async: false, type: "GET", url: "/origami/get_order_info", dataType: "json", @@ -733,7 +733,7 @@ function getOnlineOrderCount(){ } } }); - //end Ajax + //end Ajax // alert(count); return count; } @@ -748,31 +748,33 @@ function print_receipt(){ var params = { 'filename':filename, 'receipt_no':receipt_no, 'printer_name':printer_name }; console.log(params); $.ajax({ - type: "POST", + type: "POST", url: "/origami/sale/"+sale_id+"/doemal_order/payment/print", data: params, success:function(result){ - // For Server Print - from jade - if ($("#server_mode").val() == "cloud") { - if(typeof code2lab != 'undefined'){ - code2lab.printFile(result.filepath.substr(6), result.printer_url); + if (!$('#print_settings').data('action-cable')) { + // For Server Print - from jade + if ($("#server_mode").val() == "cloud") { + if(typeof code2lab != 'undefined'){ + code2lab.printFile(result.filepath.substr(6), result.printer_url); + } + window.location.href = '/origami/order_reservation'; + } + else{ + swal({ + title: "Print Success", + text: "Complete Order", + type: 'success', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function () { + window.location.href = '/origami/order_reservation'; + }); } - window.location.href = '/origami/order_reservation'; - } - else{ - swal({ - title: "Print Success", - text: "Complete Order", - type: 'success', - html: true, - closeOnConfirm: false, - closeOnCancel: false, - allowOutsideClick: false - }, function () { - window.location.href = '/origami/order_reservation'; - }); } } }); } -/* pdf print out */ \ No newline at end of file +/* pdf print out */ diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index f5920e9e..c5101e71 100755 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -13,6 +13,7 @@ @import "reset"; @import "induties/assign_in_duties"; @import "select2"; +@import "select2-material"; /*@import "bootstrap-select/css/bootstrap-select.min";*/ diff --git a/app/assets/stylesheets/select2-material.css b/app/assets/stylesheets/select2-material.css new file mode 100644 index 00000000..a52e1654 --- /dev/null +++ b/app/assets/stylesheets/select2-material.css @@ -0,0 +1,231 @@ +.select2-container--material { + width: 100% !important; } + .select2-container--material .select2-selection--single { + background-color: transparent; + border: none; + border-bottom: 1px solid rgba(0,0,0,0.26); + border-radius: 0; + box-shadow: none; + box-sizing: content-box; + height: auto; + margin: 0; + outline: none; + padding: 0.46875rem 0 0.40625rem 0; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + .select2-container--material .select2-selection--single .select2-selection__rendered { + color: #444; + font-size: 1rem; + line-height: 18px; + padding-left: 0; } + .select2-container--material .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--material .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--material .select2-selection--single .select2-selection__arrow { + height: 20px; + margin: 0.5rem 0 0.2rem 0; + position: absolute; + line-height: 1rem; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--material .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + .select2-container--material[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + .select2-container--material[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + .select2-container--material.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--material.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + .select2-container--material.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + .select2-container--material .select2-selection--multiple { + background-color: transparent; + border: none; + border-bottom: 1px solid #ced4da; + border-radius: 0; + box-shadow: none; + box-sizing: content-box; + cursor: text; + height: auto; + margin: 0; + outline: none; + padding: 5px 0 0 0; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + .select2-container--material .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--material .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--material .select2-selection--multiple .select2-selection__placeholder { + color: #999; + margin-top: 5px; + float: left; } + .select2-container--material .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; } + .select2-container--material .select2-selection--multiple .select2-selection__choice { + background-color: #ffca28; + border-radius: 16px; + color: rgba(0, 0, 0, 0.6); + cursor: default; + float: left; + margin-right: 5px; + margin-top: 6px; + padding: 0 12px; } + .select2-container--material .select2-selection--multiple .select2-selection__choice__remove { + cursor: pointer; + display: inline-block; + font-weight: bold; + float: right; + margin-left: 5px; } + .select2-container--material .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + .select2-container--material[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--material[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--material[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + .select2-container--material[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + .select2-container--material[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + .select2-container--material.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + .select2-container--material.select2-container--disabled .select2-selection__choice__remove { + display: none; } + .select2-container--material.select2-container--open.select2-container--above .select2-selection--single, .select2-container--material.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + .select2-container--material.select2-container--open.select2-container--below .select2-selection--single, .select2-container--material.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + .select2-container--material.select2-container--focus .select2-selection--single { + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + outline: 0; } + .select2-container--material.select2-container--focus .select2-selection--multiple { + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + outline: 0; } + .select2-container--material .select2-search--dropdown .select2-search__field { + border: none; + border-bottom: 1px solid #ced4da; + border-radius: 0; + outline: none; } + .select2-container--material .select2-search--dropdown .select2-search__field:focus:not([readonly]) { + box-shadow: 0 1px 0 0 #ced4da; + border-bottom: 1px solid #ced4da; } + .select2-container--material .select2-search--inline .select2-search__field { + background: transparent; + border: none !important; + outline: 0; + box-shadow: none !important; + -webkit-appearance: textfield; } + .select2-container--material .select2-results > .select2-results__options { + overflow-y: auto; } + .select2-container--material .select2-results__option[role=group] { + padding: 0; } + .select2-container--material .select2-results__option[aria-disabled=true] { + color: #999; } + .select2-container--material .select2-results__option[aria-selected=true] { + background-color: #ddd; } + .select2-container--material .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--material .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--material .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--material .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--material .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--material .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--material .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + .select2-container--material .select2-results__option--highlighted[aria-selected] { + background-color: #3f729b; + color: white; } + .select2-container--material .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-dropdown { + background-color: white; + border: 1px solid #ced4da; + border-radius: 4px; + box-sizing: border-box; + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; + -webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } diff --git a/app/channels/print_channel.rb b/app/channels/print_channel.rb new file mode 100644 index 00000000..b27223e1 --- /dev/null +++ b/app/channels/print_channel.rb @@ -0,0 +1,10 @@ +class PrintChannel < ApplicationCable::Channel + def subscribed + stream_from "print_channel_#{params[:shop_code]}" + end + + def unsubscribed + # Any cleanup needed when channel is unsubscribed + stop_all_streams + end +end diff --git a/app/controllers/api/call_waiters_controller.rb b/app/controllers/api/call_waiters_controller.rb index beb676c7..08a322fa 100644 --- a/app/controllers/api/call_waiters_controller.rb +++ b/app/controllers/api/call_waiters_controller.rb @@ -28,6 +28,4 @@ class Api::CallWaitersController < Api::ApiController printer = Printer::ReceiptPrinter.new(print_settings) printer.print_call_waiter(print_settings,@table,@time,@shop) end - - end diff --git a/app/controllers/oqs/print_controller.rb b/app/controllers/oqs/print_controller.rb index 751e1c01..a5eca433 100755 --- a/app/controllers/oqs/print_controller.rb +++ b/app/controllers/oqs/print_controller.rb @@ -51,7 +51,6 @@ class Oqs::PrintController < ApplicationController ai.save end - # filename, receipt_no, cashier_printer = printer.print_receipt_bill(print_settings, false, nil,cashier_terminal,sale_items,sale_data,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info, shop_detail, "Frt",current_balance,nil,other_amount) if ENV["SERVER_MODE"] == "cloud" result = { :filepath => filename, @@ -119,7 +118,6 @@ class Oqs::PrintController < ApplicationController ai.save end - # filename, receipt_no, cashier_printer = printer.print_receipt_bill(print_settings, false, nil,cashier_terminal,sale_items,sale_data,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info, shop_detail, "Frt",current_balance,nil,other_amount) if ENV["SERVER_MODE"] == "cloud" result = { :filepath => filename, diff --git a/app/controllers/origami/home_controller.rb b/app/controllers/origami/home_controller.rb index f7416704..4ade5a2b 100755 --- a/app/controllers/origami/home_controller.rb +++ b/app/controllers/origami/home_controller.rb @@ -36,19 +36,21 @@ class Origami::HomeController < BaseOrigamiController @shop = current_shop @membership = MembershipSetting::MembershipSetting @payment_methods = PaymentMethodSetting.all - @dining_booking = @dining.current_bookings @order_items = Array.new - @dining_booking.each do |booking| + @dining.current_bookings.each do |booking| if @obj_sale || @booking.blank? @booking = booking end if booking.sale_id - @obj_sale = booking.sale - @sale_array.push(@obj_sale) - @sale_taxes = @obj_sale.sale_taxes - @status_sale = 'sale' + @sale_array.push(booking.sale) + + if @obj_sale.blank? + @obj_sale = booking.sale + @sale_taxes = @obj_sale.sale_taxes + @status_sale = 'sale' + end else @order_items += booking.order_items @obj_order = booking.orders.first diff --git a/app/controllers/origami/payments_controller.rb b/app/controllers/origami/payments_controller.rb index 4923abae..f2128556 100755 --- a/app/controllers/origami/payments_controller.rb +++ b/app/controllers/origami/payments_controller.rb @@ -109,115 +109,109 @@ class Origami::PaymentsController < BaseOrigamiController end - rebate_amount = nil + rebate_amount = nil - # For Cashier by Zone - # bookings = Booking.where("sale_id='#{sale_id}'") - booking = saleObj.booking + # For Cashier by Zone + # bookings = Booking.where("sale_id='#{sale_id}'") + booking = saleObj.booking - if current_user.role == 'cashier' - cashier_terminal = current_user.cashier_terminal - elsif booking.dining_facility - cashier_terminal = booking.cashier_terminal_by_dining_facility - end - - cashier_terminal ||= saleObj.cashier_terminal_by_shift_sale - - if booking.dining_facility - ActionCable.server.broadcast( - "order_channel", - table: booking.dining_facility, - type: 'payment', - from: getCloudDomain - ) - 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 - rebate = MembershipSetting.find_by_rebate(1) - credit_data = SalePayment.find_by_sale_id_and_payment_method(sale_id,'creditnote') - - if customer.membership_id != nil && rebate && credit_data.nil? - member_info = Customer.get_member_account(customer) - - if member_info["status"] == true - rebate_amount = Customer.get_membership_transactions(customer,saleObj.receipt_no) - current_balance = SaleAudit.paymal_search(sale_id) - end - end - - #orders print out - if type == "quick_service" - if booking.dining_facility_id.present? - table_id = booking.dining_facility_id - else - table_id = 0 - end - - latest_order = booking.booking_orders.order("order_id DESC").limit(1).first() - if !latest_order.nil? - latest_order_no = latest_order.order_id - end - - booking.booking_orders.each do |order| - # Order.pay_process_order_queue(order.order_id, table_id) - oqs = OrderQueueStation.new - oqs.pay_process_order_queue(order.order_id, table_id) - - assign_order = AssignedOrderItem.assigned_order_item_by_job(order.order_id) - from = getCloudDomain #get sub domain in cloud mode - ActionCable.server.broadcast "order_queue_station_channel",order: assign_order,from:from - end - - end - - #for card sale data - card_data = Array.new - card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id) - if !card_sale_trans_ref_no.nil? - card_sale_trans_ref_no.each do |cash_sale_trans| - card_res_date = cash_sale_trans.res_date.strftime("%Y-%m-%d").to_s - card_res_time = cash_sale_trans.res_time.strftime("%H:%M").to_s - card_no = cash_sale_trans.pan.last(4) - card_no = card_no.rjust(19,"**** **** **** ") - card_data.push({'res_date' => card_res_date, 'res_time' => card_res_time, 'batch_no' => cash_sale_trans.batch_no, 'trace' => cash_sale_trans.trace, 'pan' => card_no, 'app' => cash_sale_trans.app, 'tid' => cash_sale_trans.terminal_id, 'app_code' => cash_sale_trans.app_code, 'ref_no' => cash_sale_trans.ref_no, 'mid' => cash_sale_trans.merchant_id}) - end - end - - #card_balance amount for Paymal payment - card_balance_amount = SaleAudit.getCardBalanceAmount(sale_id) - - # get printer info - print_settings = PrintSetting.find_by_unique_code(unique_code) - # 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 - printed_status = 'Paid' - end - - 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,current_shop, 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) + if current_user.role == 'cashier' + cashier_terminal = current_user.cashier_terminal + elsif booking.dining_facility + cashier_terminal = booking.cashier_terminal_by_dining_facility end + + cashier_terminal ||= saleObj.cashier_terminal_by_shift_sale + + if booking.dining_facility + ActionCable.server.broadcast( + "order_channel", + table: booking.dining_facility, + type: 'payment', + from: getCloudDomain + ) + end + + customer = saleObj.customer + + # get member information + rebate = MembershipSetting.find_by_rebate(1) + credit_data = SalePayment.find_by_sale_id_and_payment_method(sale_id,'creditnote') + + if customer.membership_id != nil && rebate && credit_data.nil? + member_info = Customer.get_member_account(customer) + + if member_info["status"] == true + rebate_amount = Customer.get_membership_transactions(customer,saleObj.receipt_no) + current_balance = SaleAudit.paymal_search(sale_id) + end + end + + #orders print out + if type == "quick_service" + if booking.dining_facility_id.present? + table_id = booking.dining_facility_id + else + table_id = 0 + end + + latest_order = booking.booking_orders.order("order_id DESC").limit(1).first() + if !latest_order.nil? + latest_order_no = latest_order.order_id + end + + booking.booking_orders.each do |order| + # Order.pay_process_order_queue(order.order_id, table_id) + oqs = OrderQueueStation.new + oqs.pay_process_order_queue(order.order_id, table_id) + + assign_order = AssignedOrderItem.assigned_order_item_by_job(order.order_id) + from = getCloudDomain #get sub domain in cloud mode + ActionCable.server.broadcast "order_queue_station_channel",order: assign_order,from:from + end + + end + + #for card sale data + card_data = Array.new + card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id) + if !card_sale_trans_ref_no.nil? + card_sale_trans_ref_no.each do |cash_sale_trans| + card_res_date = cash_sale_trans.res_date.strftime("%Y-%m-%d").to_s + card_res_time = cash_sale_trans.res_time.strftime("%H:%M").to_s + card_no = cash_sale_trans.pan.last(4) + card_no = card_no.rjust(19,"**** **** **** ") + card_data.push({'res_date' => card_res_date, 'res_time' => card_res_time, 'batch_no' => cash_sale_trans.batch_no, 'trace' => cash_sale_trans.trace, 'pan' => card_no, 'app' => cash_sale_trans.app, 'tid' => cash_sale_trans.terminal_id, 'app_code' => cash_sale_trans.app_code, 'ref_no' => cash_sale_trans.ref_no, 'mid' => cash_sale_trans.merchant_id}) + end + end + + #card_balance amount for Paymal payment + card_balance_amount = SaleAudit.getCardBalanceAmount(sale_id) + + # get printer info + 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 + printed_status = 'Paid' + end + + 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) + # 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/controllers/origami/shifts_controller.rb b/app/controllers/origami/shifts_controller.rb index f4dec719..d11e781e 100755 --- a/app/controllers/origami/shifts_controller.rb +++ b/app/controllers/origami/shifts_controller.rb @@ -56,7 +56,7 @@ class Origami::ShiftsController < BaseOrigamiController cashier_terminal.save #add shift_sale_id to card_settle_trans - bank_integration = Lookup.find_by_lookup_type('bank_integration') + bank_integration = Lookup.find_by_lookup_type('bank_integration') if !bank_integration.nil? card_settle_trans = CardSettleTran.select('id').where(['shift_sale_id IS NULL and status IS NOT NULL']) @@ -67,66 +67,55 @@ class Origami::ShiftsController < BaseOrigamiController end end - if ENV["SERVER_MODE"] != "cloud" #no print in cloud server - - - + # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server # if !close_cashier_print[0].nil? # @close_cashier_print = close_cashier_print[0][1] # end - close_cashier_pdf = Lookup.collection_of("print_settings") - unique_code = "CloseCashierPdf" + close_cashier_pdf = Lookup.collection_of("print_settings") + unique_code = "CloseCashierPdf" - if !close_cashier_pdf.empty? - close_cashier_pdf.each do |close_cashier| - if close_cashier[0] == 'CloseCashierCustomisePdf' - if close_cashier[1] == '1' - unique_code="CloseCashierCustomisePdf" - else - unique_code="CloseCashierPdf" - end + if !close_cashier_pdf.empty? + close_cashier_pdf.each do |close_cashier| + if close_cashier[0] == 'CloseCashierCustomisePdf' + if close_cashier[1] == '1' + unique_code="CloseCashierCustomisePdf" + else + unique_code="CloseCashierPdf" end end end - #get tax - shift_obj = ShiftSale.where('id =?',@shift.id) - sale_items = '' - @lookup = Lookup.shift_sale_items_lookup_value - if @lookup.to_i == 1 - @sale_items = Sale.get_shift_sale_items(@shift.id) - other_charges = Sale.get_other_charges() - @total_other_charges_info = other_charges.where("sales.shift_sale_id IN (?) and sale_status='completed'",@shift) - end - @sale_taxes = Sale.get_separate_tax(shift_obj,from=nil,to=nil,type='') - @total_waste = Sale.get_total_waste(shift_id).sum(:grand_total) - @total_spoile = Sale.get_total_spoile(shift_id).sum(:grand_total) - #other payment details for mpu or visa like card - @other_payment = ShiftSale.get_by_shift_other_payment(@shift) - - # Calculate price_by_accounts - @total_amount_by_account = ShiftSale.calculate_total_price_by_accounts(@shift,'amount') - @total_discount_by_account = ShiftSale.calculate_total_price_by_accounts(@shift,'discount') - @total_member_discount = ShiftSale.get_total_member_discount(@shift) - @total_dinein = ShiftSale.get_total_dinein(@shift).total_dinein_amount - @total_takeway = ShiftSale.get_total_takeway(@shift).total_takeway_amount - @total_other_charges = ShiftSale.get_total_other_charges(@shift).total_other_charges_amount - @total_credit_payments = ShiftSale.get_shift_sales_with_credit_payment(shift_id).total_credit_payments - @payment_methods = PaymentMethodSetting.where("is_active='1'").pluck("payment_method") - # get printer info - print_settings = PrintSetting.find_by_unique_code(unique_code) - printer = Printer::CashierStationPrinter.new(print_settings) - - # print close cashier setting - close_cashier_print = Lookup.collection_of('close_cashier_print') - if close_cashier_print.empty? - @settings_lookup = Lookup.new(lookup_type: "close_cashier_print", name: "CloseCashierPrint", value: "1") - @settings_lookup.save - end - find_close_cashier_print = Lookup.collection_of('close_cashier_print') - if find_close_cashier_print[0][1].to_i > 0 - printer.print_close_cashier(print_settings,cashier_terminal, @shift, @sale_items, @total_other_charges_info, shop_details,@sale_taxes,@other_payment,@total_amount_by_account,@total_discount_by_account,@total_member_discount,@total_dinein,@total_takeway,@total_other_charges,@total_waste,@total_spoile,@total_credit_payments,@payment_methods) - end end + #get tax + shift_obj = ShiftSale.where('id = ?', @shift.id) + @lookup = Lookup.shift_sale_items_lookup_value + if @lookup.to_i == 1 + @sale_items = Sale.get_shift_sale_items(@shift.id) + @total_other_charges_info = ShiftSale.get_other_charges(@shift) + end + @sale_taxes = Sale.get_separate_tax(shift_obj,from=nil,to=nil,type='') + @total_waste = Sale.get_total_waste(shift_id).sum(:grand_total) + @total_spoile = Sale.get_total_spoile(shift_id).sum(:grand_total) + #other payment details for mpu or visa like card + @other_payment = ShiftSale.get_by_shift_other_payment(@shift) + + # Calculate price_by_accounts + @total_amount_by_account = ShiftSale.calculate_total_price_by_accounts(@shift,'amount') + @total_discount_by_account = ShiftSale.calculate_total_price_by_accounts(@shift,'discount') + @total_member_discount = ShiftSale.get_total_member_discount(@shift) + @total_dinein = ShiftSale.get_total_dinein(@shift).total_dinein_amount + @total_takeway = ShiftSale.get_total_takeway(@shift).total_takeway_amount + @total_other_charges = ShiftSale.get_total_other_charges(@shift).total_other_charges_amount + @total_credit_payments = ShiftSale.get_shift_sales_with_credit_payment(shift_id).total_credit_payments + @payment_methods = PaymentMethodSetting.where("is_active='1'").pluck("payment_method") + # get printer info + print_settings = PrintSetting.find_by_unique_code(unique_code) + printer = Printer::CashierStationPrinter.new(print_settings) + + # print close cashier setting + if Lookup.collection_of('close_cashier_print').any? { |l| l == ['CloseCashierPrint', '1'] } + printer.print_close_cashier(print_settings, cashier_terminal, @shift, @sale_items, @total_other_charges_info, shop_details, @sale_taxes, @other_payment, @total_amount_by_account, @total_discount_by_account, @total_member_discount, @total_dinein, @total_takeway, @total_other_charges, @total_waste, @total_spoile, @total_credit_payments, @payment_methods) + end + # end end Employee.logout(session[:session_token]) session[:session_token] = nil diff --git a/app/controllers/reports/shiftsale_controller.rb b/app/controllers/reports/shiftsale_controller.rb index 998842ef..f5c18ae2 100755 --- a/app/controllers/reports/shiftsale_controller.rb +++ b/app/controllers/reports/shiftsale_controller.rb @@ -53,28 +53,31 @@ class Reports::ShiftsaleController < BaseReportController @shift = ShiftSale.find_by_id(shift_id) shift_obj = ShiftSale.where('id =?',shift_id) + close_cashier_pdf = Lookup.collection_of("print_settings") - if ENV["SERVER_MODE"] != "cloud" #no print in cloud server + unique_code = "CloseCashierPdf" - close_cashier_pdf = Lookup.collection_of("print_settings") - - unique_code = "CloseCashierPdf" - - if !close_cashier_pdf.empty? - close_cashier_pdf.each do |close_cashier| - if close_cashier[0] == 'CloseCashierCustomisePdf' - if close_cashier[1] == '1' - unique_code="CloseCashierCustomisePdf" - else - unique_code="CloseCashierPdf" - end + if !close_cashier_pdf.empty? + close_cashier_pdf.each do |close_cashier| + if close_cashier[0] == 'CloseCashierCustomisePdf' + if close_cashier[1] == '1' + unique_code="CloseCashierCustomisePdf" + else + unique_code="CloseCashierPdf" end end end - + end shop_details = current_shop cashier_terminal = @shift.cashier_terminal + + @lookup = Lookup.shift_sale_items_lookup_value + if @lookup.to_i == 1 + @sale_items = Sale.get_shift_sale_items(@shift.id) + @total_other_charges_info = ShiftSale.get_other_charges(@shift) + end + @sale_taxes = Sale.get_separate_tax(shift_obj,from=nil,to=nil,type='') @total_waste = Sale.get_total_waste(shift_id).sum(:grand_total) @total_spoile = Sale.get_total_spoile(shift_id).sum(:grand_total) @@ -96,14 +99,10 @@ class Reports::ShiftsaleController < BaseReportController printer = Printer::CashierStationPrinter.new(print_settings) # printer.print_close_cashier(print_settings,cashier_terminal,@shift, nil, shop_details,@sale_taxes,@other_payment,@total_amount_by_account,@total_discount_by_account,@total_member_discount,@total_dinein,@total_takeway,@total_other_charges,@total_waste,@total_spoile,@total_credit_payments) - printer.print_close_cashier(print_settings,cashier_terminal,@shift, @sale_items, @total_other_charges_info, shop_details,@sale_taxes,@other_payment,@total_amount_by_account,@total_discount_by_account,@total_member_discount,@total_dinein,@total_takeway,@total_other_charges,@total_waste,@total_spoile,@total_credit_payments,@payment_methods) + printer.print_close_cashier(print_settings, cashier_terminal, @shift, @sale_items, @total_other_charges_info, shop_details, @sale_taxes, @other_payment, @total_amount_by_account, @total_discount_by_account, @total_member_discount, @total_dinein, @total_takeway, @total_other_charges, @total_waste, @total_spoile, @total_credit_payments, @payment_methods) respond_to do |format| format.html { redirect_to '/en/reports/shiftsale/', notice: 'Printing Completed.'} - format - end end end - - end diff --git a/app/helpers/print_settings_helper.rb b/app/helpers/print_settings_helper.rb index 3e712d7c..6f14d22e 100755 --- a/app/helpers/print_settings_helper.rb +++ b/app/helpers/print_settings_helper.rb @@ -1,2 +1,5 @@ module PrintSettingsHelper + def print_settings + tag.div id: 'print_settings', class: 'hidden', data: { action_cable: Lookup.collection_of('print_settings').any? { |x| x == ["ActionCable", "1"] } } + end end diff --git a/app/models/booking.rb b/app/models/booking.rb index ac5551ee..14a440a1 100755 --- a/app/models/booking.rb +++ b/app/models/booking.rb @@ -172,6 +172,15 @@ class Booking < ApplicationRecord return @orders, @order_items, @sales, @sale_items, @sale_taxes, @sale_payments, @sale_orders, @sale_audits, @bookings, @assigned_order_items, @shift_sales end + def self.get_booking_id(order_no) + booking = Booking.joins(" JOIN booking_orders bo ON bo.booking_id = bookings.booking_id") + .joins(" JOIN orders o ON o.order_id=bo.order_id") + .where("o.order_id='#{order_no}'") + .first() + + return booking.booking_id + end + private def generate_custom_id if self.booking_id.nil? diff --git a/app/models/order_queue_station.rb b/app/models/order_queue_station.rb index ae77a769..b1257425 100755 --- a/app/models/order_queue_station.rb +++ b/app/models/order_queue_station.rb @@ -176,7 +176,7 @@ class OrderQueueStation < ApplicationRecord end def move_print_pdf(change_to,current_user,change_from,order_items,oqs) - if ENV["SERVER_MODE"] != "cloud" #no print in cloud server + # if ENV["SERVER_MODE"] != "cloud" #no print in cloud server # get printer info @from = (DiningFacility.find(change_from)).name @to = (DiningFacility.find(change_to)).name @@ -198,6 +198,6 @@ class OrderQueueStation < ApplicationRecord printer.print_move_table(print_settings,@to,@from ,@shop,@date,@type,@moved_by,order_items,oqs) # end # end - end + # end end end diff --git a/app/models/printer/cashier_station_printer.rb b/app/models/printer/cashier_station_printer.rb index c3b1bd39..ceff5022 100755 --- a/app/models/printer/cashier_station_printer.rb +++ b/app/models/printer/cashier_station_printer.rb @@ -38,66 +38,108 @@ class Printer::CashierStationPrinter < Printer::PrinterWorker # self.print(filename, cashier_terminal.printer_name) # end - def print_close_cashier(printer_settings,cashier_terminal,shift_sale, sale_items, total_other_charges_info,shop_details,sale_taxes,other_payment,amount,discount,member_discount,total_dinein,total_takeway,total_other_charges,total_waste,total_spoile,total_credit_payments,payment_methods,foodcourt=nil) + def print_close_cashier(printer_settings, cashier_terminal, shift_sale, sale_items, total_other_charges_info, shop_details, sale_taxes, other_payment, amount, discount, member_discount, total_dinein, total_takeway, total_other_charges, total_waste, total_spoile, total_credit_payments, payment_methods) + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + if !sale_items.blank? or !sale_items.nil? + @account_cate_count = Hash.new {|hash, key| hash[key] = 0} + sale_items.each {|acc_cate| @account_cate_count[acc_cate.account_id] += 1} - if !sale_items.blank? or !sale_items.nil? - @account_cate_count = Hash.new {|hash, key| hash[key] = 0} - sale_items.each {|acc_cate| @account_cate_count[acc_cate.account_id] += 1} + @menu_cate_count = Hash.new {|hash, key| hash[key] = 0} + sale_items.each {|cate| @menu_cate_count[cate.menu_category_id] += 1} + @totalByAccount = Hash.new {|hash, key| hash[key] = 0} + sale_items.each {|acc| @totalByAccount[acc.account_id] += acc.grand_total} + end - @menu_cate_count = Hash.new {|hash, key| hash[key] = 0} - sale_items.each {|cate| @menu_cate_count[cate.menu_category_id] += 1} + #Use CUPS service + #Generate PDF + #Print + cashier = shift_sale.employee.name + shift_name = shift_sale.shift_started_at.utc.getlocal.strftime("%d-%m-%Y %I:%M %p") + "_" + shift_sale.shift_closed_at.utc.getlocal.strftime("%d-%m-%Y %I:%M %p") + filename = "tmp/close_cashier_#{cashier}_#{shift_name}.pdf" + pdf = CloseCashierPdf.new(printer_settings, shift_sale, sale_items, total_other_charges_info, @account_cate_count, @menu_cate_count, @totalByAccount, shop_details, sale_taxes, other_payment, amount, discount, member_discount, total_dinein, total_takeway, total_other_charges, total_waste, total_spoile, total_credit_payments, payment_methods) + close_cashier_pdf = Lookup.collection_of("print_settings") #print_settings with name:CloseCashierPdf - - @totalByAccount = Hash.new {|hash, key| hash[key] = 0} - sale_items.each {|acc| @totalByAccount[acc.account_id] += acc.grand_total} - end - - #Use CUPS service - #Generate PDF - #Print - cashier = shift_sale.employee.name - shift_name = shift_sale.shift_started_at.utc.getlocal.strftime("%d-%m-%Y %I:%M %p") + "_" + shift_sale.shift_closed_at.utc.getlocal.strftime("%d-%m-%Y %I:%M %p") - filename = "tmp/close_cashier_#{cashier}_#{shift_name}.pdf" - pdf = CloseCashierPdf.new(printer_settings,shift_sale, sale_items, total_other_charges_info, @account_cate_count, @menu_cate_count, @totalByAccount, shop_details,sale_taxes,other_payment,amount,discount,member_discount,total_dinein,total_takeway,total_other_charges,total_waste,total_spoile,total_credit_payments,payment_methods,foodcourt) - close_cashier_pdf = Lookup.collection_of("print_settings") #print_settings with name:CloseCashierPdf - - if !close_cashier_pdf.empty? - close_cashier_pdf.each do |close_cashier| - if close_cashier[0] == 'CloseCashierCustomisePdf' - if close_cashier[1] == '1' - pdf = CloseCashierCustomisePdf.new(printer_settings,shift_sale,shop_details,sale_taxes,other_payment,amount,discount,member_discount,total_dinein,total_takeway,total_other_charges,total_waste,total_spoile,total_credit_payments,foodcourt) - else - pdf = CloseCashierPdf.new(printer_settings,shift_sale, sale_items, total_other_charges_info, @account_cate_count, @menu_cate_count, @totalByAccount, shop_details,sale_taxes,other_payment,amount,discount,member_discount,total_dinein,total_takeway,total_other_charges,total_waste,total_spoile,total_credit_payments,payment_methods,foodcourt) + if !close_cashier_pdf.empty? + close_cashier_pdf.each do |close_cashier| + if close_cashier[0] == 'CloseCashierCustomisePdf' + if close_cashier[1] == '1' + pdf = CloseCashierCustomisePdf.new(printer_settings, shift_sale, shop_details, sale_taxes, other_payment, amount, discount, member_discount, total_dinein, total_takeway, total_other_charges, total_waste, total_spoile, total_credit_payments) + else + pdf = CloseCashierPdf.new(printer_settings, shift_sale, sale_items, total_other_charges_info, @account_cate_count, @menu_cate_count, @totalByAccount, shop_details, sale_taxes, other_payment, amount,discount, member_discount, total_dinein, total_takeway, total_other_charges, total_waste, total_spoile, total_credit_payments, payment_methods) + end end end end - end - pdf.render_file filename - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, cashier_terminal.printer_name) + pdf.render_file filename + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, cashier_terminal.printer_name) + end + 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, + shift_sale: shift_sale, + cashier_terminal: cashier_terminal, + shift_employee: shift_sale.employee, + sale_items: sale_items, + other_charges: total_other_charges_info, + sale_taxes: sale_taxes, + other_payment: other_payment, + total_amount_by_account: amount, + total_discount_by_account: discount, + total_member_discount: member_discount, + total_waste: total_waste, + total_spoile: total_spoile, + total_other_charges: total_other_charges, + total_credit_payments: total_credit_payments + } + ) end end def print_sale_items_report(print_settings, shop_details, period_name, type, account, from_date, to_date, shift_name, sale_items, total_other_charges) - filename = "tmp/reports_sale_items.pdf" + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + filename = "tmp/reports_sale_items.pdf" - if print_settings.unique_code == "SaleItemsPdf" - pdf = SaleItemsPdf.new(print_settings, shop_details, period_name, type, account, from_date, to_date, shift_name, sale_items, total_other_charges) - puts 'Printing!!!!' - end - if print_settings.unique_code == "SaleItemsStarPdf" - pdf = SaleItemsStarPdf.new(print_settings, shop_details, period_name, type, account, from_date, to_date, shift_name, sale_items, total_other_charges) - puts 'PrintingStar!!!!' - end + if print_settings.unique_code == "SaleItemsPdf" + pdf = SaleItemsPdf.new(print_settings, shop_details, period_name, type, account, from_date, to_date, shift_name, sale_items, total_other_charges) + end - pdf.render_file filename + if print_settings.unique_code == "SaleItemsStarPdf" + pdf = SaleItemsStarPdf.new(print_settings, shop_details, period_name, type, account, from_date, to_date, shift_name, sale_items, total_other_charges) + end - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, print_settings.printer_name) + pdf.render_file filename + + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, print_settings.printer_name) + end + else + ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", + queue: print_settings.printer_name, + unique_code: print_settings.unique_code, + print_copies: print_settings.print_copies, + data: { + sale_items: sale_items.as_json, + total_other_charges: total_other_charges, + shop_details:shop_details.as_json, + sale_details: { + period: period_name, + type: type, + account: account, + from_date: from_date, + to_date: to_date, + shift: shift_name, + }, + } + ) end end #sqa diff --git a/app/models/printer/order_queue_printer.rb b/app/models/printer/order_queue_printer.rb index 682737b1..c92fa465 100755 --- a/app/models/printer/order_queue_printer.rb +++ b/app/models/printer/order_queue_printer.rb @@ -1,81 +1,66 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker def print_order_item(print_settings, oqs, order_id, order_item_id, print_status, before_updated_qty="", options="") - # Must be one print - if print_settings.print_copies == 0 - print_settings.print_copies = 1 - print_settings.save! + booking_id = Booking.get_booking_id(order_id) + order_item = print_query('order_item', order_item_id).first #OrderItem.find_by_item_code(item_code) + + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + # Must be one print + if print_settings.print_copies == 0 + print_settings.print_copies = 1 + print_settings.save! + end + + options = order_item.options + # check for item not to show + pdf = print_settings.unique_code.constantize.new(print_settings, order_item, print_status, options, oqs.use_alternate_name, before_updated_qty) + + shop = Shop.current_shop + directory_name = "public/orders_#{shop.shop_code}" + Dir.mkdir(directory_name) unless File.exists?(directory_name) + + filename = directory_name + "/order_item_#{order_id}_#{order_item_id}" + ".pdf" + + pdf.render_file filename + + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, oqs.printer_name) + end + else + ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", + queue: oqs.station_name, + unique_code: print_settings.unique_code, + print_copies: print_settings.print_copies, + data: { + order_item: order_item.as_json(methods: :type), + print_status: print_status.gsub(/[()]/, ""), + booking_id: booking_id, + precision: print_settings.precision + } + ) end - order_item = print_query('order_item', order_item_id) #OrderItem.find_by_item_code(item_code) - options = order_item[0].options - - # check for item not to show - # if order_item[0].price != 0 - pdf = print_settings.unique_code.constantize.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - # end - - - # shop = Shop.current_shop - directory_name = 'public/orders_'+oqs.shop_code - Dir.mkdir(directory_name) unless File.exists?(directory_name) - - filename = directory_name + "/order_item_#{order_id}_#{order_item_id}" + ".pdf" - - pdf.render_file filename - - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, oqs.printer_name) - end - #For print copy - # pdf.render_file filename.gsub(".","-copy.") - # self.print(filename.gsub(".","-copy."), oqs.printer_name) - return filename, order_id, oqs.printer_name end # Query for per order def print_order_summary(print_settings, oqs, order_id, order_items, print_status, before_updated_qty="", options="") - #Use CUPS service - #Generate PDF - #Print - # Must be one print - if print_settings.print_copies == 0 - print_settings.print_copies = 1 - print_settings.save! - end + booking_id = Booking.get_booking_id(order_id) #order[0].order_id + order = print_query('order_summary', order_id) - shop = Shop.current_shop - directory_name = "public/orders_#{shop.shop_code}" - Dir.mkdir(directory_name) unless File.exists?(directory_name) - - # For Print Per Item - if oqs.cut_per_item - - order_items.each do |odi| - odi_item = print_query('order_item', odi.order_items_id) - - filename = directory_name + "/order_item_#{order_id}.pdf" - # filename = "tmp/order_item_#{order_id}" + ".pdf" - # For Item Options - options = odi.options == "[]" ? "" : odi.options - - # check for item not to show - #if odi.price != 0 - pdf = print_settings.unique_code.constantize.new(print_settings, odi_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty) - - # pdf.render_file "tmp/order_item.pdf" - pdf.render_file filename - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, oqs.printer_name) - # self.print(filename.gsub(".","-copy."), oqs.printer_name) - end - #end + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + #Use CUPS service + #Generate PDF + #Print + # Must be one print + if print_settings.print_copies == 0 + print_settings.print_copies = 1 + print_settings.save! end - # For Print Order Summary - else - order = print_query('order_summary', order_id) + + shop = Shop.current_shop + directory_name = "public/orders_#{shop.shop_code}" + Dir.mkdir(directory_name) unless File.exists?(directory_name) filename = directory_name + "/order_summary_#{order_id}.pdf" # filename = "tmp/order_summary_#{order_id}" + ".pdf" @@ -86,15 +71,26 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker if ENV["SERVER_MODE"] != "cloud" self.print(filename, oqs.printer_name) end - #For print copy - # pdf.render_file filename.gsub(".","-copy.") - # self.print(filename.gsub(".","-copy."), oqs.printer_name) + else + ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", + queue: oqs.station_name, + unique_code: print_settings.unique_code, + print_copies: print_settings.print_copies, + data: { + order_item: order_items, + order: order.as_json(methods: :type), + print_status: "", + booking_id: booking_id, + precision: print_settings.precision + } + ) end + return filename, order_id, oqs.printer_name end # Print for orders in booking - def print_booking_summary(print_settings, oqs, booking_id, print_status,before_updated_qty="") + def print_booking_summary(print_settings, oqs, booking_id, print_status, before_updated_qty="") # Must be one print if print_settings.print_copies == 0 print_settings.print_copies = 1 @@ -188,37 +184,51 @@ class Printer::OrderQueuePrinter < Printer::PrinterWorker # Check in-out time def print_check_in_out(print_settings, cashier_terminal, booking, table) - #Use CUPS service - #Generate PDF - #Print - sale_id = booking.sale_id - filename = "tmp/check_in_out_#{sale_id}" + ".pdf" + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + #Use CUPS service + #Generate PDF + #Print + sale_id = booking.sale_id + filename = "tmp/check_in_out_#{sale_id}" + ".pdf" - pdf = CheckInOutPdf.new(print_settings,booking, table) - print_setting = PrintSetting.all + pdf = CheckInOutPdf.new(print_settings,booking, table) - # if order_item[0].price != 0 - if !print_setting.empty? - print_setting.each do |print_settings| - if print_settings.unique_code == 'CheckInOutPdf' - pdf = CheckInOutPdf.new(print_settings,booking, table) + print_setting = PrintSetting.all + + # if order_item[0].price != 0 + if !print_setting.empty? + print_setting.each do |print_settings| + if print_settings.unique_code == 'CheckInOutPdf' + pdf = CheckInOutPdf.new(print_settings,booking, table) + end end end - end - pdf.render_file filename + pdf.render_file filename - # Must be one print - if print_settings.print_copies == 0 - print_settings.print_copies = 1 - print_settings.save! - end - # print_settings.print_copies = 1 - # print_settings.save! + # Must be one print + if print_settings.print_copies == 0 + print_settings.print_copies = 1 + print_settings.save! + end + # print_settings.print_copies = 1 + # print_settings.save! - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print(filename, print_settings.printer_name) + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print(filename, print_settings.printer_name) + end + 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: { + booking: booking, + table: table, + table_type: table.type, + } + ) end end end diff --git a/app/models/printer/receipt_printer.rb b/app/models/printer/receipt_printer.rb index c250a464..f7c48fe0 100755 --- a/app/models/printer/receipt_printer.rb +++ b/app/models/printer/receipt_printer.rb @@ -90,11 +90,11 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker end #Bill Receipt Print - def print_receipt_bill(printer_settings, kbz_pay_status, qr_code, cashier_terminal, 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 = nil, transaction_ref = nil) - #Use CUPS service - #Generate PDF - #Print - if printer_settings + def print_receipt_bill(printer_settings, kbz_pay_status, qr_code, cashier_terminal,sale_items,sale_data, customer_name, item_price_by_accounts, discount_price_by_accounts, member_info = nil,rebate_amount=nil,shop_details, printed_status,balance,card_data,other_amount,latest_order_no,card_balance_amount,order_reservation) + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + #Use CUPS service + #Generate PDF + #Print 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) @@ -109,48 +109,96 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker # print as print copies in printer setting count = printer_settings.print_copies - # override print copies for print worker loop - # print_settings.print_copies = 1 - # print_settings.save! - end - 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 + directory_name = 'public/receipts' + Dir.mkdir(directory_name) unless File.exists?(directory_name) + Rails.logger.debug "############## dir::" + directory_name + + 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 + + Rails.logger.debug "############## filename::" + filename + else + if !Lookup.where(lookup_type: "ReceiptPdfView").pluck(:value).include?('1') + sale_payments = SalePayment + .select(:payment_method, 'SUM(`sale_payments`.`payment_amount`) AS `payment_amount`') + .where(sale_id: sale_data.sale_id).group(:payment_method) + + 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_payments.as_json + }, + 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 - def print_stock_check_result(print_settings,stockcheck, stockcheck_items,checker_name, shop_details) - pdf = StockResultPdf.new(print_settings,stockcheck, stockcheck_items,checker_name, shop_details) - pdf.render_file "tmp/print_stock_check_result.pdf" - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print("tmp/print_stock_check_result.pdf") + def print_stock_check_result(print_settings, stockcheck, stockcheck_items, checker_name, shop_details) + stock_items= [] + if stockcheck_items.length > 0 + stockcheck_items.each do |sc| + stock_item= { + count: sc.stock_count.to_s, + item_name: MenuItemInstance.get_item_name(sc.item_code) + } + stock_items.push(stock_item) + end + end + + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + pdf = StockCheckPdf.new(print_settings,stockcheck, stockcheck_items,checker_name, shop_details) + + pdf.render_file "tmp/print_stock_check_result.pdf" + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print("tmp/print_stock_check_result.pdf") end + else + ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", + queue: print_settings.printer_name, + unique_code: print_settings.unique_code, + print_copies: print_settings.print_copies, + data: { + stockcheck: stockcheck, + stockcheck_items: stock_items, + checker_name: checker_name, + shop_details: shop_details, + } + ) + end end #Queue No Print @@ -167,21 +215,40 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker end #Move Table Print - def print_move_table(printer_settings,to,from,shop_detail,date,type,moved_by,order_items,oqs) - #Use CUPS service - #Generate PDF - #Print + def print_move_table(printer_settings, to, from, shop_detail, date, type, moved_by, order_items, oqs) + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + #Use CUPS service + #Generate PDF + #Print + pdf = MoveTablePdf.new(printer_settings, to, from, shop_detail, date, type, moved_by, order_items) + pdf.render_file "tmp/print_move_table.pdf" - pdf = MoveTablePdf.new(printer_settings,to,from,shop_detail,date,type,moved_by,order_items) - pdf.render_file "tmp/print_move_table.pdf" - - if oqs.print_copy - self.print("tmp/print_move_table.pdf",oqs.printer_name) + if ENV["SERVER_MODE"] != "cloud" + if oqs.print_copy + self.print("tmp/print_move_table.pdf",oqs.printer_name) + else + print_settings.print_copies = 1 + print_settings.save! + #no print in cloud server + self.print("tmp/print_move_table.pdf", oqs.printer_name) + end + end else - print_settings.print_copies = 1 - print_settings.save! - #no print in cloud server - self.print("tmp/print_move_table.pdf", oqs.printer_name) + ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", + queue: oqs.station_name, + unique_code: print_settings.unique_code, + print_copies: print_settings.print_copies, + data: { + type: type, + body: { + to: to, + from: from, + date: date, + moved_by: moved_by, + order_items: order_items.as_json, + }, + } + ) end end @@ -200,14 +267,29 @@ class Printer::ReceiptPrinter < Printer::PrinterWorker #Queue No Print def print_call_waiter(printer_settings,table,time,shop_detail) - #Use CUPS service - #Generate PDF - #Print - pdf = CallWaiterPdf.new(printer_settings,table,time,shop_detail) - pdf.render_file "tmp/print_call_waiter.pdf" - #no print in cloud server - if ENV["SERVER_MODE"] != "cloud" - self.print("tmp/print_call_waiter.pdf") + if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } + #Use CUPS service + #Generate PDF + #Print + pdf = CallWaiterPdf.new(printer_settings,table,time,shop_detail) + + pdf.render_file "tmp/print_call_waiter.pdf" + #no print in cloud server + if ENV["SERVER_MODE"] != "cloud" + self.print("tmp/print_call_waiter.pdf") + end + else + ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", + queue: print_settings.printer_name, + unique_code: print_settings.unique_code, + print_copies: print_settings.print_copies, + data: { + shop_name: shop_detail.name, + name: print_settings.name, + table: table.name, + time: time, + } + ) end end @@ -217,18 +299,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/models/sale.rb b/app/models/sale.rb index 7edaab9f..56336045 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -1014,7 +1014,7 @@ def self.get_by_shift_items(shift_sale_range, shift, from, to, status,type,accou product = product.where("sales.shift_sale_id IN (?) and sale_status='completed'",shift.to_a) discount_query = Sale.where("sales.shift_sale_id in (?) and sale_status= 'completed' ", shift.to_a).sum(:total_discount) change_amount = Sale.where("sales.shift_sale_id in (?) and sale_status= 'completed' ", shift.to_a).sum(:amount_changed) - sale_cash = Sale.select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, + sale_cash = select(Sale.column_names).select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, SUM(case when (sale_payments.payment_method='cash') then (sale_payments.payment_amount) else 0 end) as cash_amount, SUM(case when (sale_payments.payment_method='creditnote') then (sale_payments.payment_amount) else 0 end) as credit_amount, SUM(case when (sale_payments.payment_method='foc') then (sale_payments.payment_amount) else 0 end) as foc_amount") @@ -1037,7 +1037,7 @@ def self.get_by_shift_items(shift_sale_range, shift, from, to, status,type,accou product = product.where("sales.shift_sale_id IN (?) and sale_status='completed'",shift_sale_range.to_a) discount_query = Sale.where("sales.shift_sale_id IN (?) and sale_status ='completed'", shift_sale_range.to_a).sum(:total_discount) change_amount = Sale.where("sales.shift_sale_id IN (?) and sale_status ='completed'", shift_sale_range.to_a).sum(:amount_changed) - sale_cash = Sale.select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, + sale_cash = select(Sale.column_names).select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, SUM(case when (sale_payments.payment_method='cash') then (sale_payments.payment_amount) else 0 end) as cash_amount, SUM(case when (sale_payments.payment_method='creditnote') then (sale_payments.payment_amount) else 0 end) as credit_amount, SUM(case when (sale_payments.payment_method='foc') then (sale_payments.payment_amount) else 0 end) as foc_amount") @@ -1061,7 +1061,7 @@ def self.get_by_shift_items(shift_sale_range, shift, from, to, status,type,accou discount_query = Sale.where("sales.receipt_date between ? and ? and sale_status ='completed'", from,to).sum(:total_discount) change_amount = Sale.where("sales.receipt_date between ? and ? and sale_status ='completed'", from,to).sum(:amount_changed) - sale_cash = Sale.select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, + sale_cash = select(Sale.column_names).select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, SUM(case when (sale_payments.payment_method='cash') then (sale_payments.payment_amount) else 0 end) as cash_amount, SUM(case when (sale_payments.payment_method='creditnote') then (sale_payments.payment_amount) else 0 end) as credit_amount, SUM(case when (sale_payments.payment_method='foc') then (sale_payments.payment_amount) else 0 end) as foc_amount") @@ -1120,7 +1120,7 @@ def self.get_staff_meal_items(shift_sale_range, shift, from, to, status, account product = product.where("sales.shift_sale_id IN (?) and sale_status='completed'",shift.to_a) discount_query = Sale.where("sales.shift_sale_id in (?) and sale_status= 'completed' ", shift.to_a).sum(:total_discount) change_amount = Sale.where("sales.shift_sale_id in (?) and sale_status= 'completed' ", shift.to_a).sum(:amount_changed) - sale_cash = Sale.select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, + sale_cash = select(Sale.column_names).select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, SUM(case when (sale_payments.payment_method='cash') then (sale_payments.payment_amount) else 0 end) as cash_amount, SUM(case when (sale_payments.payment_method='creditnote') then (sale_payments.payment_amount) else 0 end) as credit_amount, SUM(case when (sale_payments.payment_method='foc') then (sale_payments.payment_amount) else 0 end) as foc_amount") @@ -1143,7 +1143,7 @@ def self.get_staff_meal_items(shift_sale_range, shift, from, to, status, account product = product.where("sales.shift_sale_id IN (?) and sale_status='completed'",shift_sale_range.to_a) discount_query = Sale.where("sales.shift_sale_id IN (?) and sale_status ='completed'", shift_sale_range.to_a).sum(:total_discount) change_amount = Sale.where("sales.shift_sale_id IN (?) and sale_status ='completed'", shift_sale_range.to_a).sum(:amount_changed) - sale_cash = Sale.select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, + sale_cash = select(Sale.column_names).select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, SUM(case when (sale_payments.payment_method='cash') then (sale_payments.payment_amount) else 0 end) as cash_amount, SUM(case when (sale_payments.payment_method='creditnote') then (sale_payments.payment_amount) else 0 end) as credit_amount, SUM(case when (sale_payments.payment_method='foc') then (sale_payments.payment_amount) else 0 end) as foc_amount") @@ -1167,7 +1167,7 @@ def self.get_staff_meal_items(shift_sale_range, shift, from, to, status, account discount_query = Sale.where("sales.receipt_date between ? and ? and sale_status ='completed'", from,to).sum(:total_discount) change_amount = Sale.where("sales.receipt_date between ? and ? and sale_status ='completed'", from,to).sum(:amount_changed) - sale_cash = Sale.select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, + sale_cash = select(Sale.column_names).select("SUM(case when (sale_payments.payment_method IN (#{payment_methods.empty? ? '""' : payment_methods.map{ |pm| "\"#{pm}\"" }.join(', ') })) then (sale_payments.payment_amount) else 0 end) as card_amount, SUM(case when (sale_payments.payment_method='cash') then (sale_payments.payment_amount) else 0 end) as cash_amount, SUM(case when (sale_payments.payment_method='creditnote') then (sale_payments.payment_amount) else 0 end) as credit_amount, SUM(case when (sale_payments.payment_method='foc') then (sale_payments.payment_amount) else 0 end) as foc_amount") diff --git a/app/models/seed_generator.rb b/app/models/seed_generator.rb index 482a65a1..8118b272 100755 --- a/app/models/seed_generator.rb +++ b/app/models/seed_generator.rb @@ -1,14 +1,15 @@ class SeedGenerator < ApplicationRecord # Generate ID for Tables def self.generate_id(model, prefix) - model_name = self.get_model_name(model) + # model_name = self.get_model_name(model) + model_name = model prefix ||= '' prefix << '-' if prefix.present? if ENV["SERVER_MODE"] == 'cloud' prefix << 'C' - else + # else prefix << 'L' end @@ -22,7 +23,8 @@ class SeedGenerator < ApplicationRecord end def self.generate_ids(model, prefix, count = 1) - model_name = self.get_model_name(model) + # model_name = self.get_model_name(model) + model_name = model prefix ||= '' prefix << '-' if prefix.present? diff --git a/app/models/shift_sale.rb b/app/models/shift_sale.rb index bbc7cc20..b35ddac8 100755 --- a/app/models/shift_sale.rb +++ b/app/models/shift_sale.rb @@ -152,7 +152,7 @@ class ShiftSale < ApplicationRecord def self.get_by_shift_other_payment(shift) payment_methods = SalePayment.where.not(payment_method: ['cash', 'creditnote', 'foc']).distinct.pluck(:payment_method) - shift_other_payments = Sale.select("sales.sale_id,sale_payments.payment_method as name") + shift_other_payments = Sale.select("sales.sale_id, sale_payments.payment_method as name") if payment_methods.present? shift_other_payments = shift_other_payments.select("#{payment_methods.map { |method| "SUM(case when (sale_payments.payment_method='#{method}') then sale_payments.payment_amount else 0 end) as `#{method == 'paypar' ? 'redeem' : method}`"}.join(', ')}") end @@ -210,6 +210,11 @@ class ShiftSale < ApplicationRecord .first() end + def self.get_other_charges(shift) + query = SaleItem.joins("JOIN sales as s ON s.sale_id = sale_items.sale_id") + .where('shift_sale_id =? and s.sale_status = "completed" and sale_items.product_code = "Other Charges" and sale_items.item_instance_code is null',shift.id) + end + def self.search(filter,from,to) if filter.blank? keyword = '' diff --git a/app/models/shop.rb b/app/models/shop.rb index 2a366927..3e79ed60 100755 --- a/app/models/shop.rb +++ b/app/models/shop.rb @@ -8,7 +8,7 @@ class Shop < ApplicationRecord accepts_nested_attributes_for :display_images def file_data=(input_data) - self.data = input_data.read + self.data = input_data.read end def self.current_shop diff --git a/app/pdf/close_cashier_pdf.rb b/app/pdf/close_cashier_pdf.rb index ba1374f2..c2189985 100755 --- a/app/pdf/close_cashier_pdf.rb +++ b/app/pdf/close_cashier_pdf.rb @@ -482,7 +482,8 @@ class CloseCashierPdf < Prawn::Document def other_charges_detail(total_other_charges) total_charges = 0 total_charges_items = 0 - + p "total other charges<=========================" + p total_other_charges unless total_other_charges.nil? y_position = cursor bounding_box([0,y_position], :width =>self.page_width - 10, :height => 20) do @@ -496,6 +497,7 @@ class CloseCashierPdf < Prawn::Document total_other_charges.each do |charges| move_down 3 + p charges['product_name'] add_item_line(charges['product_name'], charges['unit_price'].to_i, charges['total_item'].to_i, charges['grand_total'].to_i) total_charges_items += charges['total_item'].to_i diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb index ea8d1723..aefeded3 100755 --- a/app/pdf/receipt_bill_pdf.rb +++ b/app/pdf/receipt_bill_pdf.rb @@ -114,7 +114,7 @@ class ReceiptBillPdf < Prawn::Document if kbz_pay_status if printed_status == 'credit_payment' printed_status = 'Paid' - end + end kbzpay_qr_generator(printed_status, qr_code) end @@ -327,70 +327,47 @@ class ReceiptBillPdf < Prawn::Document end def all_total(sale_data,precision,delimiter,printed_status) - move_down line_move - item_name_width = self.item_width - y_position = cursor - if sale_data.discount_type == 'member_discount' - dis_type = "Member Discount:" - else - dis_type = "Overall Discount:" + move_down line_move + item_name_width = self.item_width + y_position = cursor + if sale_data.discount_type == 'member_discount' + dis_type = "Member Discount:" + else + dis_type = "Overall Discount:" + end + + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "#{ dis_type }", :size => self.item_font_size,:align => :left + end + bounding_box([self.item_description_width,y_position], :width =>self.label_width) do + text "( #{number_format(sale_data.total_discount, :precision => precision.to_i, :delimiter => delimiter)} )" , :size => self.item_font_size,:align => :right + end + + service_tax_desc = "" + service_tax_amount = 0 + service_tax_rate = 0 + com_tax_desc = "" + com_tax_amount = 0 + com_tax_rate = 0 + if sale_data.sale_taxes.length > 0 + incl_tax = "" + if sale_data.tax_type == "inclusive" + incl_tax = "Incl." end - bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do - text "#{ dis_type }", :size => self.item_font_size,:align => :left + find_lookup = Lookup.find_by_lookup_type('show_total_before_tax') + if find_lookup.nil? || find_lookup == nil + lookup = Lookup.new(lookup_type: 'show_total_before_tax', name: 'Show Total Before Tax', value: '0') + lookup.save end - bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - text "( #{number_format(sale_data.total_discount, :precision => precision.to_i, :delimiter => delimiter)} )" , :size => self.item_font_size,:align => :right - end - - service_tax_desc = "" - service_tax_amount = 0 - service_tax_rate = 0 - com_tax_desc = "" - com_tax_amount = 0 - com_tax_rate = 0 - if sale_data.sale_taxes.length > 0 - incl_tax = "" - if sale_data.tax_type == "inclusive" - incl_tax = "Incl." - end - - find_lookup = Lookup.find_by_lookup_type('show_total_before_tax') - if find_lookup.nil? || find_lookup == nil - lookup = Lookup.new(lookup_type: 'show_total_before_tax', name: 'Show Total Before Tax', value: '0') - lookup.save - end - check_lookup_type = Lookup.find_by_lookup_type('show_total_before_tax') - if check_lookup_type.value == '1' - sale_data.sale_taxes.each do |st| - if (st.tax_name.include? "Service") - service_tax_desc = st.tax_name - service_tax_amount = st.tax_payable_amount - if incl_tax - service_tax_rate = st.tax_rate.to_i - end - end - if (st.tax_name.include? "Commercial") - com_tax_desc = st.tax_name - com_tax_amount = st.tax_payable_amount - if incl_tax - com_tax_rate = st.tax_rate.to_i - end - end - end - move_down line_move - y_position = cursor - bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do - text "#{ service_tax_desc } (#{incl_tax} #{ service_tax_rate }%)", :size => self.item_font_size,:align => :left - end - bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - text "#{number_format(service_tax_amount, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right - end - move_down line_move - y_position = cursor - stroke_horizontal_rule - bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do - text "Total Before Tax", :size => self.item_font_size,:align => :left + check_lookup_type = Lookup.find_by_lookup_type('show_total_before_tax') + if check_lookup_type.value == '1' + sale_data.sale_taxes.each do |st| + if (st.tax_name.include? "Service") + service_tax_desc = st.tax_name + service_tax_amount = st.tax_payable_amount + if incl_tax + service_tax_rate = st.tax_rate.to_i end bounding_box([self.item_description_width,y_position], :width =>self.label_width) do text "#{service_tax_amount.to_i + @sub_total.to_i}" , :size => self.item_font_size,:align => :right @@ -419,60 +396,102 @@ class ReceiptBillPdf < Prawn::Document bounding_box([self.item_description_width,y_position], :width =>self.label_width) do text "#{number_format(st.tax_payable_amount, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right end + end + if (st.tax_name.include? "Commercial") + com_tax_desc = st.tax_name + com_tax_amount = st.tax_payable_amount + if incl_tax + com_tax_rate = st.tax_rate.to_i end end + end + move_down line_move + y_position = cursor + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "#{ service_tax_desc } (#{incl_tax} #{ service_tax_rate }%)", :size => self.item_font_size,:align => :left + end + bounding_box([self.item_description_width,y_position], :width =>self.label_width) do + text "#{number_format(service_tax_amount, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right + end + move_down line_move + y_position = cursor + stroke_horizontal_rule + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "Total Before Tax", :size => self.item_font_size,:align => :left + end + bounding_box([self.item_description_width,y_position], :width =>self.label_width) do + text "#{service_tax_amount.to_i + @sub_total.to_i}" , :size => self.item_font_size,:align => :right + end + move_down line_move + y_position = cursor + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "#{ com_tax_desc } (#{incl_tax} #{ com_tax_rate.to_i }%)", :size => self.item_font_size,:align => :left + end + bounding_box([self.item_description_width,y_position], :width =>self.label_width) do + text "#{number_format(com_tax_amount, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right + end else - - end - - # move_down 5 - # y_position = cursor - - # bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do - # text "Total Tax", :size => self.item_font_size,:align => :left - # end - # bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - # text "( " +"#{sale_data.total_tax}" +" )" , :size => self.item_font_size,:align => :right - # end - - if sale_data.rounding_adjustment != 0.0 - move_down line_move + sale_data.sale_taxes.each do |st| + move_down line_move y_position = cursor bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do - text "Rounding Adjustment", :size => self.item_font_size,:align => :left + text "#{ st.tax_name } (#{incl_tax} #{ st.tax_rate.to_i }%)", :size => self.item_font_size,:align => :left end bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - text "#{sale_data.rounding_adjustment}", :size => self.item_font_size,:align => :right + text "#{number_format(st.tax_payable_amount, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right end + end end + end + # move_down 5 + # y_position = cursor + + # bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + # text "Total Tax", :size => self.item_font_size,:align => :left + # end + # bounding_box([self.item_description_width,y_position], :width =>self.label_width) do + # text "( " +"#{sale_data.total_tax}" +" )" , :size => self.item_font_size,:align => :right + # end + + if sale_data.rounding_adjustment != 0.0 move_down line_move y_position = cursor - move_down line_move - bounding_box([0,y_position], :width =>self.item_description_width) do - text "Grand Total",:style => :bold, :size => self.header_font_size,:align => :left + + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "Rounding Adjustment", :size => self.item_font_size,:align => :left end bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - text "#{number_format(sale_data.grand_total, :precision => precision.to_i, :delimiter => delimiter)}" , :style => :bold, :size => self.header_font_size,:align => :right + text "#{sale_data.rounding_adjustment}", :size => self.item_font_size,:align => :right end - move_down line_move + end - sale_payment(sale_data,precision,delimiter,printed_status) + move_down line_move + y_position = cursor + move_down line_move + bounding_box([0,y_position], :width =>self.item_description_width) do + text "Grand Total",:style => :bold, :size => self.header_font_size,:align => :left + end + bounding_box([self.item_description_width,y_position], :width =>self.label_width) do + text "#{number_format(sale_data.grand_total, :precision => precision.to_i, :delimiter => delimiter)}" , :style => :bold, :size => self.header_font_size,:align => :right + end + move_down line_move + + sale_payment(sale_data,precision,delimiter,printed_status) end def sale_payment(sale_data,precision,delimiter,printed_status) - stroke_horizontal_rule - # move_down 2 - move_down line_move - # sql = "SELECT SUM(payment_amount) - # FROM sale_payments where payment_method='creditnote' - # and sale_id='#{sale_data.sale_id}'" - - if printed_status == 'credit_payment' + stroke_horizontal_rule + #move_down line_move + # sql = "SELECT SUM(payment_amount) + # FROM sale_payments where payment_method='creditnote' + # and sale_id='#{sale_data.sale_id}'" + + if printed_status == 'credit_payment' sale_payments = SalePayment.select(:payment_amount, :payment_method, :updated_at) .where("sale_id = '#{sale_data.sale_id}' AND payment_method != 'creditnote'") - else + else sql = SalePayment.select("(SUM(payment_amount))").where("payment_method='creditnote' and sale_id='#{sale_data.sale_id}'").to_sql # sql1 = "SELECT CASE WHEN s.amount_changed > 0 and (s.amount_received - s.amount_changed) = s.grand_total THEN ( SELECT SUM(payment_amount) # FROM sale_payments where payment_method='creditnote' @@ -490,42 +509,57 @@ class ReceiptBillPdf < Prawn::Document where sa.sale_id='#{sale_data.sale_id}')) = 0 THEN payment_method!='creditnote' ELSE 1 END) AND sale_id = ?", sale_data.sale_id) .group("payment_method") - end - - sale_payments.each do |payment| - y_position = cursor - if payment.payment_method == "paypar" - bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do - text "Redeem Payment", :size => self.item_font_size,:align => :left - end - elsif printed_status == 'credit_payment' - text "#{payment.payment_method.capitalize} Payment on #{payment.updated_at.strftime('%d-%m-%Y')}", :left_margin => -10, :size => self.item_font_size,:align => :left - else - payment_method = payment.payment_method.capitalize - if payment.payment_method == "paymal" - payment_method ='Card' - end - bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do - text "#{payment_method} Payment", :size => self.item_font_size,:align => :left - end - end + end - bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - text "#{number_format(payment.payment_amount, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right - end - move_down line_move + sale_payments.each do |payment| + y_position = cursor + if payment.payment_method == "paypar" + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "Redeem Payment", :size => self.item_font_size,:align => :left + end + elsif printed_status == 'credit_payment' + text "#{payment.payment_method.capitalize} Payment on #{payment.updated_at.strftime('%d-%m-%Y')}", :left_margin => -10, :size => self.item_font_size,:align => :left + else + payment_method = payment.payment_method.capitalize + if payment.payment_method == "paymal" + payment_method ='Card' + end + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "#{payment_method} Payment", :size => self.item_font_size,:align => :left + end end - if sale_data.amount_received > 0 - y_position = cursor - move_down line_move - bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do - text "Change Amount", :size => self.item_font_size,:align => :left - end - bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - text "#{number_format(sale_data.amount_changed, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right - end - # move_down line_move + end + + sale_payments.each do |payment| + y_position = cursor + if payment.payment_method == "paypar" + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "Redeem Payment", :size => self.item_font_size,:align => :left + end + elsif printed_status == 'credit_payment' + text "#{payment.payment_method.capitalize} Payment on #{payment.updated_at.strftime('%d-%m-%Y')}", :left_margin => -10, :size => self.item_font_size,:align => :left + else + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "#{payment.payment_method.capitalize} Payment", :size => self.item_font_size,:align => :left + end end + + bounding_box([self.item_description_width,y_position], :width =>self.label_width) do + text "#{number_format(payment.payment_amount, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right + end + move_down line_move + end + if sale_data.amount_received > 0 + y_position = cursor + move_down line_move + bounding_box([0,y_position], :width =>self.item_description_width, :height => self.item_height) do + text "Change Amount", :size => self.item_font_size,:align => :left + end + bounding_box([self.item_description_width,y_position], :width =>self.label_width) do + text "#{number_format(sale_data.amount_changed, :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right + end + # move_down line_move + end end # show member information diff --git a/app/pdf/stock_result_pdf.rb b/app/pdf/stock_check_pdf.rb similarity index 99% rename from app/pdf/stock_result_pdf.rb rename to app/pdf/stock_check_pdf.rb index 1da06dd2..d04cd82e 100755 --- a/app/pdf/stock_result_pdf.rb +++ b/app/pdf/stock_check_pdf.rb @@ -1,4 +1,4 @@ -class StockResultPdf < Prawn::Document +class StockCheckPdf < Prawn::Document attr_accessor :label_width, :price_column_width, :page_width, :page_height, :margin, :price_width, :item_width, :header_font_size, :item_font_size, :item_height, :qty_width, :total_width, :item_description_width, :text_width def initialize(printer_settings, stockcheck, stockcheck_items, checker_name, shop_details) diff --git a/app/views/oqs/home/index.html.erb b/app/views/oqs/home/index.html.erb index 487eeeb2..0b5e9d93 100644 --- a/app/views/oqs/home/index.html.erb +++ b/app/views/oqs/home/index.html.erb @@ -195,6 +195,8 @@ "> +<%= print_settings %> +