extface 0.4.5 → 0.4.6a

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 094a1a3f1328988565cd7966333ba79881d8679b
4
- data.tar.gz: 3059edd4c802691b120367b37df7e82cc7edcdd2
3
+ metadata.gz: e6a5e92df95302c771ddb50d19300c437e18b089
4
+ data.tar.gz: d371929e63c4779cf028f6464d03266fc5e00e7f
5
5
  SHA512:
6
- metadata.gz: b3aa842dce8345e2815e7842f57134f227c2bbbfb3c0c7da77474e7b3dc14c491b0033dc59497a8b0ecee3dd0ecb674e4eb1437952bef5012fa4ec06cd721450
7
- data.tar.gz: a7b41afb5321a20d4a72e1eb75c0138eff2ecf081b2aa706b6d7fcdfdd2ef9a4ebc13b7a86d28bb36ea439b2f6ec8f4b3542a98a22bc13c8b22abf4dcf222026
6
+ metadata.gz: 213e8d580c1e35bf442b3c49c3f4251cf7e0d47843beccc245254ef2705445931adea025c0589390e72c800a61d1c3b854a60166521f3d6142753a6ab0ee1861
7
+ data.tar.gz: fe4b57ffe2d57fc16f6e2958543fa43bcbaba43fc333c170d60d1d9a2ec0c13e4b827d61fb4bdec45b279cfc8ed3332ed84ee134a9bf540ed3474bda8ed65e7b
@@ -0,0 +1,4 @@
1
+ module Extface
2
+ class ApiDriver
3
+ end
4
+ end
@@ -48,8 +48,6 @@ module Extface
48
48
  def add_total_modifier(fixed_value = nil, percent_ratio = nil) raise_not_implemented end
49
49
  def total_payment() raise_not_implemented end #auto calculated total default payment
50
50
  def close_fiscal_doc() raise_not_implemented end
51
-
52
- def cancel_doc_session() raise_not_implemented end #repair from broken doc session
53
51
 
54
52
  #fiscal basket session of Extface::Driver::Base::Fiscal::SaleItem instances
55
53
  def sale_and_pay_items_session(sale_items = [], operator = '', password = '') raise_not_implemented end
@@ -0,0 +1,5 @@
1
+ module Extface
2
+ class Driver::Clock::Pms < Extface::ApiDriver
3
+ NAME = 'ClockPMS Simple Posting (PMS API)'.freeze
4
+ end
5
+ end
@@ -90,8 +90,8 @@ module Extface
90
90
  end
91
91
  end
92
92
 
93
- def period_report_session(from, to, detailed = true)
94
- end
93
+ # def period_report_session(from, to, detailed = true)
94
+ # end
95
95
 
96
96
  #print
97
97
  def open_non_fiscal_doc
@@ -27,5 +27,43 @@ module Extface
27
27
  PAPER_MOVE = 0x2C
28
28
  PAPER_CUT = 0x2D
29
29
  end
30
+
31
+ module Sales
32
+ START_NON_FISCAL_DOC = 0x26 #other
33
+ END_NON_FISCAL_DOC = 0x27 #other
34
+ PRINT_NON_FISCAL_TEXT = 0x2a #other
35
+ START_FISCAL_DOC = 0x30
36
+ SALE = 0x31
37
+ SUBTOTAL = 0x33
38
+ SALE_AND_SHOW = 0x34
39
+ TOTAL = 0x35
40
+ PRINT_FISCAL_TEXT = 0x36
41
+ END_FISCAL_DOC = 0x38
42
+ PRINT_INFO_FOR_CLIENT = 0x39
43
+ SALE_ITEM = 0x3a
44
+ CANCEL_FISCAL_DOC = 0x3c
45
+ PRINT_BARCODE = 0x54
46
+ PRINT_DUPLICATE_DOC = 0x6d
47
+ end
48
+
49
+ module Reports
50
+ REPORT_FP_BY_NUMBER = 0x49
51
+ COMPACT_REPORT_FP_BY_DATE = 0x4f
52
+ REPORT_FP_BY_DATE = 0x5e
53
+ COMPACT_REPORT_FP_BY_NUM = 0x5f
54
+ REPORT_BY_OPERATORS = 0x69
55
+ REPORT_BY_ITEMS = 0x6F
56
+ end
57
+
58
+ module Closure
59
+ DAY_FIN_REPORT = 0x45
60
+ EXPANDED_DAY_FIN_REPORT = 0x6c
61
+ EXPANDED_DAY_FIN_REPORT_BY_DEPS = 0x75
62
+ EXPANDED_DAY_FIN_REPORT_BY_ITEMS = 0x76
63
+ end
64
+
65
+ module Other
66
+ PAYED_RECV_ACCOUNT = 0x46
67
+ end
30
68
  end
31
69
  end
@@ -16,12 +16,129 @@ module Extface
16
16
  end
17
17
  end
18
18
 
19
+ #tests
20
+ def non_fiscal_test
21
+ device.session("Non Fiscal Text") do |s|
22
+ s.notify "Printing Non Fiscal Text"
23
+ s.open_non_fiscal_doc
24
+ s.print "********************************"
25
+ s.print "Extface Print Test".center(32)
26
+ s.print "********************************"
27
+ s.fsend Printer::PAPER_MOVE, "1"
28
+ s.print "Driver: " + "#{self.class::NAME}".truncate(24)
29
+ s.close_non_fiscal_doc
30
+ s.notify "Printing finished"
31
+ end
32
+ end
33
+
34
+ def fiscal_test
35
+ sale_and_pay_items_session([
36
+ SaleItem.new( price: 0.01, text1: "Extface Test" )
37
+ ])
38
+ end
39
+
40
+ #reports
41
+ def z_report_session
42
+ device.session("Z Report") do |s|
43
+ s.notify "Z Report Start"
44
+ s.fsend Closure::DAY_FIN_REPORT, "0"
45
+ s.notify "Z Report End"
46
+ end
47
+ end
48
+
49
+ def x_report_session
50
+ device.session("X Report") do |s|
51
+ s.notify "X Report Start"
52
+ s.fsend Closure::DAY_FIN_REPORT, "2"
53
+ s.notify "X Report End"
54
+ end
55
+ end
56
+
57
+ #print
58
+ def open_non_fiscal_doc
59
+ fsend Sales::START_NON_FISCAL_DOC
60
+ @print_session = true
61
+ end
62
+
63
+ def print(text) #up to 38 sybols, TODO check
64
+ raise "Not in print session" unless @print_session
65
+ fsend Sales::PRINT_NON_FISCAL_TEXT, text
66
+ end
67
+
68
+ def close_non_fiscal_doc
69
+ fsend Sales::END_NON_FISCAL_DOC
70
+ @print_session = false
71
+ end
72
+
19
73
  def check_status
20
74
  flush #clear receive buffer
21
75
  fsend(Info::GET_STATUS, 'X') # get 6 bytes status
22
76
  errors.empty?
23
77
  end
24
78
 
79
+ #fiscal
80
+ def open_fiscal_doc(operator = "1", password = "1")
81
+ fsend Sales::START_FISCAL_DOC, "#{operator.presence || "1"},#{password.presence || "1"},00001"
82
+ @fiscal_session = true
83
+ end
84
+
85
+ def close_fiscal_doc
86
+ raise "Not in fiscal session" unless @fiscal_session
87
+ fsend Sales::END_FISCAL_DOC
88
+ @fiscal_session = false
89
+ end
90
+
91
+ def add_sale(sale_item)
92
+ raise "Not in fiscal session" unless @fiscal_session
93
+ fsend Sales::SALE_AND_SHOW, build_sale_data(sale_item)
94
+ end
95
+
96
+ def add_comment(text)
97
+ raise "Not in fiscal session" unless @fiscal_session
98
+ end
99
+
100
+ def add_payment(value = nil, type_num = nil)
101
+ raise "Not in fiscal session" unless @fiscal_session
102
+ payment_data = "".tap() do |data|
103
+ data << "\t"
104
+ data << PAYMENT_TYPE_MAP[type_num || 1]
105
+ data << ("%.2f" % value) unless value.blank?
106
+ end
107
+ fsend(Sales::TOTAL, payment_data)
108
+ end
109
+
110
+ def total_payment
111
+ raise "Not in fiscal session" unless @fiscal_session
112
+ fsend(Sales::TOTAL, "\t")
113
+ end
114
+
115
+ #basket
116
+ def sale_and_pay_items_session(items = [], operator = "1", password = "1")
117
+ device.session("Fiscal Doc") do |s|
118
+ s.notify "Fiscal Doc Start"
119
+ s.open_fiscal_doc
120
+ s.notify "Register Sale"
121
+ items.each do |item|
122
+ s.add_sale(item)
123
+ end
124
+ s.notify "Register Payment"
125
+ s.total_payment
126
+ s.notify "Close Fiscal Receipt"
127
+ s.close_fiscal_doc
128
+ s.notify "Fiscal Doc End"
129
+ end
130
+ end
131
+
132
+ def cancel_doc_session
133
+ device.session("Doc cancel") do |s|
134
+ s.notify "Doc Cancel Start"
135
+ s.fsend Sales::CANCEL_FISCAL_DOC
136
+ s.paper_cut
137
+ s.notify "Doc Cancel End"
138
+ end
139
+ end
140
+
141
+ #common
25
142
  def fsend(cmd, data = "") #return data or nil
26
143
  packet_data = build_packet(cmd, data) #store packet to be able to re-transmit it with the same sequence number
27
144
  result = false
@@ -96,6 +213,8 @@ module Extface
96
213
  errors.add :base, "Date & Time Not Set" unless (status_0 & 0x04).zero?
97
214
  errors.add :base, "Syntax Error" unless (status_0 & 0x02).zero?
98
215
  status_1 = status[1].ord
216
+ errors.add :base, "Unpermitted Command In This Mode" unless (status_1 & 0x02).zero?
217
+ errors.add :base, "Field Overflow" unless (status_1 & 0x01).zero?
99
218
  end
100
219
 
101
220
  private
@@ -4,5 +4,5 @@
4
4
  <%= button_to 'X Report', fiscal_device_path(@device), remote: true, name: :x_report, value: true, class: 'btn btn-warning' %>
5
5
  <%= button_to 'Z Report', fiscal_device_path(@device), remote: true, name: :z_report, value: true, class: 'btn btn-warning' %>
6
6
 
7
- <%= button_to 'Cancel Fiscal Doc', fiscal_device_path(@device), remote: true, name: :cancel_fiscal_doc, value: true, class: 'btn btn-warning' %>
7
+ <%= button_to 'Cancel Fiscal Doc', fiscal_device_path(@device), remote: true, name: :cancel_fiscal_doc, value: true, class: 'btn btn-danger' %>
8
8
 
@@ -1,2 +1,12 @@
1
1
 
2
- <%= button_to 'Paper Cut', fiscal_device_path(@device), remote: true, name: :paper_cut, value: true %>
2
+ <%= button_to 'Paper Cut', fiscal_device_path(@device), remote: true, name: :paper_cut, value: true, class: 'btn btn-warning' %>
3
+
4
+ <%= button_to 'Non Fiscal Test', fiscal_device_path(@device), remote: true, name: :non_fiscal_test, value: true, class: 'btn btn-warning' %>
5
+
6
+ <%= button_to 'Fiscal Test', fiscal_device_path(@device), remote: true, name: :fiscal_test, value: true, class: 'btn btn-warning' %>
7
+
8
+ <%= button_to 'X Report', fiscal_device_path(@device), remote: true, name: :x_report, value: true, class: 'btn btn-warning' %>
9
+ <%= button_to 'Z Report', fiscal_device_path(@device), remote: true, name: :z_report, value: true, class: 'btn btn-warning' %>
10
+
11
+ <%= button_to 'Cancel Fiscal Doc', fiscal_device_path(@device), remote: true, name: :cancel_fiscal_doc, value: true, class: 'btn btn-danger' %>
12
+
@@ -1,3 +1,3 @@
1
1
  module Extface
2
- VERSION = "0.4.5"
2
+ VERSION = "0.4.6a"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extface
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.6a
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Vangelov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-21 00:00:00.000000000 Z
11
+ date: 2015-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -109,9 +109,11 @@ files:
109
109
  - app/helpers/extface/devices_helper.rb
110
110
  - app/helpers/extface/jobs_helper.rb
111
111
  - app/helpers/extface/sse_helper.rb
112
+ - app/models/extface/api_driver.rb
112
113
  - app/models/extface/device.rb
113
114
  - app/models/extface/driver.rb
114
115
  - app/models/extface/driver/base/fiscal.rb
116
+ - app/models/extface/driver/clock/pms.rb
115
117
  - app/models/extface/driver/daisy/commands_fx1200.rb
116
118
  - app/models/extface/driver/daisy_fx1200.rb
117
119
  - app/models/extface/driver/datecs/commands_v1.rb
@@ -240,9 +242,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
240
242
  version: '0'
241
243
  required_rubygems_version: !ruby/object:Gem::Requirement
242
244
  requirements:
243
- - - ">="
245
+ - - ">"
244
246
  - !ruby/object:Gem::Version
245
- version: '0'
247
+ version: 1.3.1
246
248
  requirements: []
247
249
  rubyforge_project:
248
250
  rubygems_version: 2.4.6