Manos Chorianopoulos

barcode lib v17

...@@ -14,6 +14,33 @@ import RSBarcodes_Swift ...@@ -14,6 +14,33 @@ import RSBarcodes_Swift
14 import AVFoundation 14 import AVFoundation
15 15
16 16
17 + extension String {
18 +
19 + var length: Int {
20 + return count
21 + }
22 +
23 + subscript (i: Int) -> String {
24 + return self[i ..< i + 1]
25 + }
26 +
27 + func substring(fromIndex: Int) -> String {
28 + return self[min(fromIndex, length) ..< length]
29 + }
30 +
31 + func substring(toIndex: Int) -> String {
32 + return self[0 ..< max(0, toIndex)]
33 + }
34 +
35 + subscript (r: Range<Int>) -> String {
36 + let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
37 + upper: min(length, max(0, r.upperBound))))
38 + let start = index(startIndex, offsetBy: range.lowerBound)
39 + let end = index(start, offsetBy: range.upperBound - range.lowerBound)
40 + return String(self[start ..< end])
41 + }
42 + }
43 +
17 extension CouponBarcodeView { 44 extension CouponBarcodeView {
18 struct headerView: View { 45 struct headerView: View {
19 var goBack: () -> () 46 var goBack: () -> ()
...@@ -95,8 +122,44 @@ extension CouponBarcodeView { ...@@ -95,8 +122,44 @@ extension CouponBarcodeView {
95 return nil 122 return nil
96 } 123 }
97 124
125 + func constructBarcode() -> String? {
126 + // EAN 13 barcode construction
127 + // let couponData = coupon["coupon_data"] as? [String: Any] ?? ["":""]
128 + let couponString = coupon["coupon"] as? String ?? ""
129 +
130 + if (!couponString.isEmpty) {
131 + var checkDigit = 0;
132 + var result = 0;
133 +
134 + var fixedCouponCode = couponString;
135 + if (fixedCouponCode.count < 12) {
136 + let loops = 12 - fixedCouponCode.count;
137 + var zerosStr = "";
138 + for i in 0 ..< loops {
139 + zerosStr += "0"
140 + }
141 + fixedCouponCode = zerosStr + fixedCouponCode;
142 + }
143 +
144 + var multiplier = 3;
145 + for idx in (0 ... (fixedCouponCode.count - 1)).reversed() {
146 + let curChar = fixedCouponCode[idx];
147 + result += (Int(curChar) ?? 0) * multiplier;
148 + multiplier = multiplier == 3 ? 1 : 3;
149 + }
150 + checkDigit = 10 - (result % 10);
151 +
152 + let barcodeStr = fixedCouponCode + String(checkDigit);
153 + return barcodeStr;
154 + }
155 +
156 + return ""
157 + }
158 +
98 159
99 var body: some View { 160 var body: some View {
161 + let barcodeString = constructBarcode() ?? ""
162 +
100 GeometryReader { geometry in 163 GeometryReader { geometry in
101 ScrollView(showsIndicators: false) { 164 ScrollView(showsIndicators: false) {
102 VStack(alignment: .leading) { 165 VStack(alignment: .leading) {
...@@ -131,7 +194,7 @@ extension CouponBarcodeView { ...@@ -131,7 +194,7 @@ extension CouponBarcodeView {
131 194
132 VStack(alignment: .center) { 195 VStack(alignment: .center) {
133 VStack { 196 VStack {
134 - Text("1A2C378") 197 + Text(coupon["coupon"] as? String ?? "")
135 .fontWeight(.bold) 198 .fontWeight(.bold)
136 .font(.system(size: 27)) 199 .font(.system(size: 27))
137 .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) 200 .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
...@@ -166,7 +229,7 @@ extension CouponBarcodeView { ...@@ -166,7 +229,7 @@ extension CouponBarcodeView {
166 // gen.fillColor = UIColor.white 229 // gen.fillColor = UIColor.white
167 // gen.strokeColor = UIColor.black 230 // gen.strokeColor = UIColor.black
168 231
169 - if let barcodeImage = RSUnifiedCodeGenerator.shared.generateCode("1234567891234", machineReadableCodeObjectType: AVMetadataObject.ObjectType.ean13.rawValue, targetSize: CGSize(width: 300, height: 300)) { 232 + if let barcodeImage = RSUnifiedCodeGenerator.shared.generateCode(barcodeString, machineReadableCodeObjectType: AVMetadataObject.ObjectType.ean13.rawValue, targetSize: CGSize(width: 300, height: 300)) {
170 233
171 // VStack(alignment: .center) { 234 // VStack(alignment: .center) {
172 // Image(uiImage: image) 235 // Image(uiImage: image)
...@@ -200,7 +263,7 @@ extension CouponBarcodeView { ...@@ -200,7 +263,7 @@ extension CouponBarcodeView {
200 // .aspectRatio(contentMode: .fit) 263 // .aspectRatio(contentMode: .fit)
201 // .frame(width: self.uiscreen.width, height: self.uiscreen.height * 0.1) 264 // .frame(width: self.uiscreen.width, height: self.uiscreen.height * 0.1)
202 265
203 - Text("1234567891234") 266 + Text(barcodeString)
204 .fontWeight(.regular) 267 .fontWeight(.regular)
205 .font(.system(size: 22)) 268 .font(.system(size: 22))
206 .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803)) 269 .foregroundColor(Color(red: 0.2549019607843137, green: 0.3333333333333333, blue: 0.39215686274509803))
......