@@ -13,6 +13,7 @@ codeunit 148096 "Swiss QR-Bill Test Purchases"
13
13
LibraryERM: Codeunit "Library - ERM";
14
14
LibraryPurchase: Codeunit "Library - Purchase";
15
15
LibraryVariableStorage: Codeunit "Library - Variable Storage";
16
+ LibraryInventory: Codeunit "Library - Inventory";
16
17
Assert: Codeunit Assert;
17
18
SwissQRBillTestLibrary: Codeunit "Swiss QR-Bill Test Library";
18
19
DocumentType: Enum "Purchase Document Type";
@@ -1049,6 +1050,257 @@ codeunit 148096 "Swiss QR-Bill Test Purchases"
1049
1050
Assert. ExpectedError( StrSubstNo( CurrencyErr, ' ' , PurchaseHeader. "Currency Code")) ;
1050
1051
end ;
1051
1052
1053
+ [Test]
1054
+ [HandlerFunctions( ' QRBillScanMPH,MessageHandler' ) ]
1055
+ procedure OrderScanQRBillZeroAmount()
1056
+ var
1057
+ PurchaseHeader: Record "Purchase Header";
1058
+ PurchaseLine: Record "Purchase Line";
1059
+ PurchInvHeader: Record "Purch. Inv. Header";
1060
+ PurchaseOrder: TestPage "Purchase Order";
1061
+ VendorNo: Code [20 ];
1062
+ VendorBankAccountNo: Code [20 ];
1063
+ PaymentReference: Code [50 ];
1064
+ IBAN: Code [50 ];
1065
+ PostedDocNo: Code [20 ];
1066
+ QRCodeText: Text ;
1067
+ BillInfo: Text ;
1068
+ begin
1069
+ // [FEATURE] [UI]
1070
+ // [SCENARIO 457372] Scan QR-Bill into Purchase Order in case of Amount in QR-Bill is zero.
1071
+ Initialize() ;
1072
+
1073
+ // [GIVEN] Purchase Order with Purchase Line with Amount Including VAT = 1000.
1074
+ IBAN := SwissQRBillTestLibrary. GetRandomIBAN() ;
1075
+ SwissQRBillTestLibrary. CreateVendorWithBankAccount( VendorNo, VendorBankAccountNo, IBAN) ;
1076
+ CreatePurchaseHeader( PurchaseHeader, DocumentType::Order , VendorNo, false, ' ' ) ;
1077
+ LibraryPurchase. CreatePurchaseLineWithUnitCost( PurchaseLine, PurchaseHeader, LibraryInventory. CreateItemNo() , 543.21 , 1 ) ;
1078
+
1079
+ // [GIVEN] QR-Bill text where Amount = 0.
1080
+ PaymentReference := SwissQRBillTestLibrary. GetRandomQRPaymentReference() ;
1081
+ BillInfo := ' S1/10/DOCNO123' ;
1082
+ QRCodeText := SwissQRBillTestLibrary. CreateQRCodeText( IBAN, 0 , ' CHF' , PaymentReference, ' Unstr Msg' , BillInfo) ;
1083
+
1084
+ // [WHEN] Run scan QR-Bill on the given text.
1085
+ LibraryVariableStorage. Enqueue( QRCodeText) ;
1086
+ ScanToOrder( PurchaseHeader) ;
1087
+
1088
+ // [THEN] QR-Bill text was scanned. Swiss QR-Bill Amount is 0.
1089
+ Assert. ExpectedMessage( ImportSuccessMsg, LibraryVariableStorage. DequeueText()) ;
1090
+ VerifyPurchDoc( PurchaseHeader, true, PaymentReference, ' DOCNO123' , 0 , ' CHF' , IBAN, ' Unstr Msg' , BillInfo) ;
1091
+
1092
+ // [THEN] Swiss QR-Bill Amount field is editable on page Purchase Order.
1093
+ PurchaseOrder. OpenEdit() ;
1094
+ PurchaseOrder. Filter . SetFilter( "No.", PurchaseHeader. "No.") ;
1095
+ Assert. IsTrue( PurchaseOrder. "Swiss QR-Bill Amount". Editable() , ' ' ) ;
1096
+
1097
+ // [WHEN] Set Swiss QR-Bill Amount = 1000 and post Purchase Order.
1098
+ PurchaseOrder. "Swiss QR-Bill Amount". SetValue( PurchaseLine. "Amount Including VAT") ;
1099
+ PurchaseOrder. Close() ;
1100
+ PurchaseHeader. Get( PurchaseHeader. "Document Type", PurchaseHeader. "No.") ;
1101
+ PostedDocNo := LibraryPurchase. PostPurchaseDocument( PurchaseHeader, true, true) ;
1102
+
1103
+ // [THEN] Purchase Order was posted.
1104
+ PurchInvHeader. Get( PostedDocNo) ;
1105
+
1106
+ LibraryVariableStorage. AssertEmpty() ;
1107
+ SwissQRBillTestLibrary. ClearVendor( VendorNo) ;
1108
+ end ;
1109
+
1110
+ [Test]
1111
+ [HandlerFunctions( ' QRBillScanMPH,MessageHandler' ) ]
1112
+ procedure InvoiceScanQRBillZeroAmount()
1113
+ var
1114
+ PurchaseHeader: Record "Purchase Header";
1115
+ PurchaseLine: Record "Purchase Line";
1116
+ PurchInvHeader: Record "Purch. Inv. Header";
1117
+ PurchaseInvoice: TestPage "Purchase Invoice";
1118
+ VendorNo: Code [20 ];
1119
+ VendorBankAccountNo: Code [20 ];
1120
+ PaymentReference: Code [50 ];
1121
+ IBAN: Code [50 ];
1122
+ PostedDocNo: Code [20 ];
1123
+ QRCodeText: Text ;
1124
+ BillInfo: Text ;
1125
+ begin
1126
+ // [FEATURE] [UI]
1127
+ // [SCENARIO 457372] Scan QR-Bill into Purchase Invoice in case of Amount in QR-Bill is zero.
1128
+ Initialize() ;
1129
+
1130
+ // [GIVEN] Purchase Invoice with Purchase Line with Amount Including VAT = 1000.
1131
+ IBAN := SwissQRBillTestLibrary. GetRandomIBAN() ;
1132
+ SwissQRBillTestLibrary. CreateVendorWithBankAccount( VendorNo, VendorBankAccountNo, IBAN) ;
1133
+ CreatePurchaseHeader( PurchaseHeader, DocumentType::Invoice, VendorNo, false, ' ' ) ;
1134
+ LibraryPurchase. CreatePurchaseLineWithUnitCost( PurchaseLine, PurchaseHeader, LibraryInventory. CreateItemNo() , 543.21 , 1 ) ;
1135
+
1136
+ // [GIVEN] QR-Bill text where Amount = 0.
1137
+ PaymentReference := SwissQRBillTestLibrary. GetRandomQRPaymentReference() ;
1138
+ BillInfo := ' S1/10/DOCNO123' ;
1139
+ QRCodeText := SwissQRBillTestLibrary. CreateQRCodeText( IBAN, 0 , ' CHF' , PaymentReference, ' Unstr Msg' , BillInfo) ;
1140
+
1141
+ // [WHEN] Run scan QR-Bill on the given text.
1142
+ LibraryVariableStorage. Enqueue( QRCodeText) ;
1143
+ ScanToInvoice( PurchaseHeader) ;
1144
+
1145
+ // [THEN] QR-Bill text was scanned. Swiss QR-Bill Amount is 0.
1146
+ Assert. ExpectedMessage( ImportSuccessMsg, LibraryVariableStorage. DequeueText()) ;
1147
+ VerifyPurchDoc( PurchaseHeader, true, PaymentReference, ' DOCNO123' , 0 , ' CHF' , IBAN, ' Unstr Msg' , BillInfo) ;
1148
+
1149
+ // [THEN] Swiss QR-Bill Amount field is editable on page Purchase Invoice.
1150
+ PurchaseInvoice. OpenEdit() ;
1151
+ PurchaseInvoice. Filter . SetFilter( "No.", PurchaseHeader. "No.") ;
1152
+ Assert. IsTrue( PurchaseInvoice. "Swiss QR-Bill Amount". Editable() , ' ' ) ;
1153
+
1154
+ // [WHEN] Set Swiss QR-Bill Amount = 1000 and post Purchase Invoice.
1155
+ PurchaseInvoice. "Swiss QR-Bill Amount". SetValue( PurchaseLine. "Amount Including VAT") ;
1156
+ PurchaseInvoice. Close() ;
1157
+ PurchaseHeader. Get( PurchaseHeader. "Document Type", PurchaseHeader. "No.") ;
1158
+ PostedDocNo := LibraryPurchase. PostPurchaseDocument( PurchaseHeader, false, true) ;
1159
+
1160
+ // [THEN] Purchase Invoice was posted.
1161
+ PurchInvHeader. Get( PostedDocNo) ;
1162
+
1163
+ LibraryVariableStorage. AssertEmpty() ;
1164
+ SwissQRBillTestLibrary. ClearVendor( VendorNo) ;
1165
+ end ;
1166
+
1167
+ [Test]
1168
+ [HandlerFunctions( ' QRBillScanMPH,MessageHandler' ) ]
1169
+ procedure OrderScanQRBillZeroAmountUpdateAmount()
1170
+ var
1171
+ PurchaseHeader: Record "Purchase Header";
1172
+ PurchaseOrder: TestPage "Purchase Order";
1173
+ VendorNo: Code [20 ];
1174
+ VendorBankAccountNo: Code [20 ];
1175
+ PaymentReference: Code [50 ];
1176
+ IBAN: Code [50 ];
1177
+ QRCodeText: Text ;
1178
+ BillInfo: Text ;
1179
+ QRBillAmount: Decimal ;
1180
+ begin
1181
+ // [FEATURE] [UI]
1182
+ // [SCENARIO 457372] Update Swiss QR-Bill Amount after scan QR-Bill with zero Amount into Purchase Order.
1183
+ Initialize() ;
1184
+
1185
+ // [GIVEN] Purchase Order after QR-Bill with zero Amount was scanned.
1186
+ IBAN := SwissQRBillTestLibrary. GetRandomIBAN() ;
1187
+ SwissQRBillTestLibrary. CreateVendorWithBankAccount( VendorNo, VendorBankAccountNo, IBAN) ;
1188
+ CreatePurchaseHeader( PurchaseHeader, DocumentType::Order , VendorNo, false, ' ' ) ;
1189
+ PaymentReference := SwissQRBillTestLibrary. GetRandomQRPaymentReference() ;
1190
+ BillInfo := ' S1/10/DOCNO123' ;
1191
+ QRCodeText := SwissQRBillTestLibrary. CreateQRCodeText( IBAN, 0 , ' CHF' , PaymentReference, ' Unstr Msg' , BillInfo) ;
1192
+ LibraryVariableStorage. Enqueue( QRCodeText) ;
1193
+ ScanToOrder( PurchaseHeader) ;
1194
+
1195
+ // [GIVEN] Swiss QR-Bill Amount was set manually on Purchase Order page.
1196
+ PurchaseOrder. OpenEdit() ;
1197
+ PurchaseOrder. Filter . SetFilter( "No.", PurchaseHeader. "No.") ;
1198
+ PurchaseOrder. "Swiss QR-Bill Amount". SetValue( 543.21 ) ;
1199
+ PurchaseOrder. Close() ;
1200
+
1201
+ // [WHEN] Update Swiss QR-Bill Amount.
1202
+ QRBillAmount := 987.65 ;
1203
+ PurchaseOrder. OpenEdit() ;
1204
+ PurchaseOrder. Filter . SetFilter( "No.", PurchaseHeader. "No.") ;
1205
+ PurchaseOrder. "Swiss QR-Bill Amount". SetValue( QRBillAmount) ;
1206
+ PurchaseOrder. Close() ;
1207
+
1208
+ // [THEN] Swiss QR-Bill Amount was updated.
1209
+ PurchaseHeader. Get( PurchaseHeader. "Document Type", PurchaseHeader. "No.") ;
1210
+ Assert. AreEqual( QRBillAmount, PurchaseHeader. "Swiss QR-Bill Amount", ' ' ) ;
1211
+
1212
+ LibraryVariableStorage. DequeueText() ; // message text
1213
+ LibraryVariableStorage. AssertEmpty() ;
1214
+ PurchaseHeader. Delete() ;
1215
+ SwissQRBillTestLibrary. ClearVendor( VendorNo) ;
1216
+ end ;
1217
+
1218
+ [Test]
1219
+ [HandlerFunctions( ' QRBillScanMPH,MessageHandler' ) ]
1220
+ procedure OrderScanQRBillNonZeroAmount()
1221
+ var
1222
+ PurchaseHeader: Record "Purchase Header";
1223
+ PurchaseOrder: TestPage "Purchase Order";
1224
+ VendorNo: Code [20 ];
1225
+ VendorBankAccountNo: Code [20 ];
1226
+ PaymentReference: Code [50 ];
1227
+ IBAN: Code [50 ];
1228
+ QRCodeText: Text ;
1229
+ BillInfo: Text ;
1230
+ begin
1231
+ // [FEATURE] [UI]
1232
+ // [SCENARIO 457372] Swiss QR-Bill Amount field after scan QR-Bill with non-zero Amount into Purchase Order.
1233
+ Initialize() ;
1234
+
1235
+ // [GIVEN] Purchase Order after QR-Bill with non-zero Amount was scanned.
1236
+ IBAN := SwissQRBillTestLibrary. GetRandomIBAN() ;
1237
+ SwissQRBillTestLibrary. CreateVendorWithBankAccount( VendorNo, VendorBankAccountNo, IBAN) ;
1238
+ CreatePurchaseHeader( PurchaseHeader, DocumentType::Order , VendorNo, false, ' ' ) ;
1239
+
1240
+ // [GIVEN] QR-Bill text where Amount = 123.45.
1241
+ PaymentReference := SwissQRBillTestLibrary. GetRandomQRPaymentReference() ;
1242
+ BillInfo := ' S1/10/DOCNO123' ;
1243
+ QRCodeText := SwissQRBillTestLibrary. CreateQRCodeText( IBAN, 123.45 , ' CHF' , PaymentReference, ' Unstr Msg' , BillInfo) ;
1244
+
1245
+ // [WHEN] Run scan QR-Bill on the given text.
1246
+ LibraryVariableStorage. Enqueue( QRCodeText) ;
1247
+ ScanToOrder( PurchaseHeader) ;
1248
+
1249
+ // [THEN] Swiss QR-Bill Amount field is not editable on Purchase Order page.
1250
+ PurchaseOrder. OpenEdit() ;
1251
+ PurchaseOrder. Filter . SetFilter( "No.", PurchaseHeader. "No.") ;
1252
+ Assert. IsFalse( PurchaseOrder. "Swiss QR-Bill Amount". Editable() , ' ' ) ;
1253
+ PurchaseOrder. Close() ;
1254
+
1255
+ LibraryVariableStorage. DequeueText() ; // message text
1256
+ LibraryVariableStorage. AssertEmpty() ;
1257
+ PurchaseHeader. Delete() ;
1258
+ SwissQRBillTestLibrary. ClearVendor( VendorNo) ;
1259
+ end ;
1260
+
1261
+ [Test]
1262
+ [HandlerFunctions( ' QRBillScanMPH,MessageHandler' ) ]
1263
+ procedure InvoiceScanQRBillNonZeroAmount()
1264
+ var
1265
+ PurchaseHeader: Record "Purchase Header";
1266
+ PurchaseInvoice: TestPage "Purchase Invoice";
1267
+ VendorNo: Code [20 ];
1268
+ VendorBankAccountNo: Code [20 ];
1269
+ PaymentReference: Code [50 ];
1270
+ IBAN: Code [50 ];
1271
+ QRCodeText: Text ;
1272
+ BillInfo: Text ;
1273
+ begin
1274
+ // [FEATURE] [UI]
1275
+ // [SCENARIO 457372] Swiss QR-Bill Amount field after scan QR-Bill with non-zero Amount into Purchase Invoice.
1276
+ Initialize() ;
1277
+
1278
+ // [GIVEN] Purchase Invoice after QR-Bill with non-zero Amount was scanned.
1279
+ IBAN := SwissQRBillTestLibrary. GetRandomIBAN() ;
1280
+ SwissQRBillTestLibrary. CreateVendorWithBankAccount( VendorNo, VendorBankAccountNo, IBAN) ;
1281
+ CreatePurchaseHeader( PurchaseHeader, DocumentType::Invoice, VendorNo, false, ' ' ) ;
1282
+
1283
+ // [GIVEN] QR-Bill text where Amount = 123.45.
1284
+ PaymentReference := SwissQRBillTestLibrary. GetRandomQRPaymentReference() ;
1285
+ BillInfo := ' S1/10/DOCNO123' ;
1286
+ QRCodeText := SwissQRBillTestLibrary. CreateQRCodeText( IBAN, 123.45 , ' CHF' , PaymentReference, ' Unstr Msg' , BillInfo) ;
1287
+
1288
+ // [WHEN] Run scan QR-Bill on the given text.
1289
+ LibraryVariableStorage. Enqueue( QRCodeText) ;
1290
+ ScanToInvoice( PurchaseHeader) ;
1291
+
1292
+ // [THEN] Swiss QR-Bill Amount field is not editable on Purchase Invoice page.
1293
+ PurchaseInvoice. OpenEdit() ;
1294
+ PurchaseInvoice. Filter . SetFilter( "No.", PurchaseHeader. "No.") ;
1295
+ Assert. IsFalse( PurchaseInvoice. "Swiss QR-Bill Amount". Editable() , ' ' ) ;
1296
+ PurchaseInvoice. Close() ;
1297
+
1298
+ LibraryVariableStorage. DequeueText() ; // message text
1299
+ LibraryVariableStorage. AssertEmpty() ;
1300
+ PurchaseHeader. Delete() ;
1301
+ SwissQRBillTestLibrary. ClearVendor( VendorNo) ;
1302
+ end ;
1303
+
1052
1304
local procedure Initialize()
1053
1305
begin
1054
1306
LibraryVariableStorage. Clear() ;
0 commit comments