Files
Masterarbeit/QuellCode/CentronERP/tests/Centron.Tests.EndToEnd/Tests/PartListBarcodes/PartListBarcodeTestHelper.cs
T
Christoph Schwörer f045b99a25 Codebasis als Dateien ins Arbeitsrepo statt als Gitlink
QuellCode/CentronERP war nur als Gitlink (Submodul-Referenz auf 79c1142)
getrackt, ohne .gitmodules und ohne erreichbares Remote. Der
Untersuchungsgegenstand der Versuchsreihe war damit nicht reproduzierbar
gesichert: Ein Klon haette ein leeres Verzeichnis erhalten, und die Belege
der 3.287 Anforderungen waeren nicht ueberpruefbar gewesen.

Umstellung:
- Historie nach c:\DEV\CentronERP_git_snapshot_79c1142 ausgelagert
  (vollstaendig lesbar, enthaelt 79c1142 und Vorgaenger 89ccfd6)
- Gitlink aus dem Index entfernt
- Dateiinhalt aufgenommen: 24.557 Dateien, rund 333 MB

Die verschachtelte .gitignore der Codebasis gilt weiter, Build-Artefakte
bleiben ausgeschlossen. Details in Versuche/Versuch_01/_Codebasis-Nachweis.md
2026-08-26 07:43:51 +02:00

274 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using Centron.BusinessLogic;
using Centron.BusinessLogic.Administration.Settings;
using Centron.BusinessLogic.Sales.Receipts;
using Centron.BusinessLogic.Sales.Receipts.DataAndResults;
using Centron.BusinessLogic.Warehousing;
using Centron.BusinessLogic.WebServices.Sales.Receipts;
using Centron.Data.WebServices.Sales.Receipts;
using Centron.Data.WebServices.Sales.Receipts.DeliveryLists;
using Centron.Data.WebServices.Sales.Receipts.Invoices;
using Centron.Data.WebServices.Sales.Receipts.Orders;
using Centron.Interfaces;
using Centron.Interfaces.Administration.Environment;
using Centron.Interfaces.BL;
using Centron.Interfaces.Sales.Receipts;
using Centron.Interfaces.Sales.Receipts.InsertReceipts;
using Centron.Tests.EndToEnd.Infrastructure;
using Centron.Tests.EndToEnd.Infrastructure.Verifier;
using CentronSoftware.Centron.WebServices.EntitiesWrongPlace.Sales.Receipts.DataAndResults;
using CentronSoftware.Centron.WebServices.Extensions;
using Xunit;
namespace Centron.Tests.EndToEnd.Tests.PartListBarcodes;
public static class PartListBarcodeTestHelper
{
public const int CustomerI3D = 10026;
public const int PartListArticleI3D = 52;
public const int PartListArticleBarcodeI3D = 504;
public const int PartListArticleAlternativeBarcodeI3D = 443;
public const int ChildArticleI3D = 139;
public const int ChildArticleBarcodeI3D1 = 511;
public const int ChildArticleBarcodeI3D2 = 512;
public static void PrepareDatabase(EndToEndTest allGoodTest)
{
allGoodTest.Sql($"UPDATE dbo.ARTIK SET StkListe = 1, SNStueckliste = 1 WHERE I3D = {PartListArticleI3D}");
allGoodTest.Sql($"UPDATE dbo.ARTIK SET BarcodeScanen = 1 WHERE I3D = {ChildArticleI3D}");
allGoodTest.Sql($"UPDATE dbo.Stammdat SET WertMemo = '' WHERE I3D = {(int)AppSettingsConst.DeliveryListStartFreeText}");
allGoodTest.Sql($"UPDATE dbo.Stammdat SET WertText = '' WHERE I3D = {(int)AppSettingsConst.DeliveryListEndFreeText}");
// Set DTALastschrift to 0, so we are not required to select a correct sepa-mandate (Bankverbindung/Mandat)
allGoodTest.Sql("UPDATE dbo.Zahkond SET DTALastschrift = 0");
allGoodTest.Sql("ALTER TABLE RechKopf DROP COLUMN LcmStatus");
}
public static ReceiptOrderDTO CreateOrder()
{
using var session = new BLSession();
var currentUser = CommonMethodsHelper.GetUser(session);
var createNewReceiptResult = session.GetBL<ReceiptWebServiceBL>().CreateNewReceipt(
CentronObjectKindNumeric.OrderClass,
currentUser,
CustomerI3D,
new CreateReceiptData
{
IgnoreCallbacks = true,
},
addressI3D: null,
contactPersonI3D: null,
insertSalutationAndAgreement: false,
ignoreDefaultContract: true,
insertCustomerDiscount: false);
var order = (ReceiptOrderDTO)createNewReceiptResult.ThrowIfError().Receipt;
var partListItem = (ReceiptOrderItemDTO)session.GetBL<ReceiptItemWebServiceBL>().CreateArticleReceiptItems(
order,
isExternalArticle: false,
PartListArticleI3D,
externalArticleKind: null,
externalArticleId: null,
warehouseI3D: -1,
currentUser,
CreateArticleReceiptItemsConfig.None()).ThrowIfError().ReceiptItems.First();
var childItem = (ReceiptOrderItemDTO)session.GetBL<ReceiptItemWebServiceBL>().CreateArticleReceiptItems(
order,
isExternalArticle: false,
ChildArticleI3D,
externalArticleKind: null,
externalArticleId: null,
warehouseI3D: -1,
currentUser,
CreateArticleReceiptItemsConfig.None()).ThrowIfError().ReceiptItems.First();
partListItem.InternalPosition = 0;
partListItem.Barcodes = new List<ReceiptItemBarcode>
{
new()
{
BarcodeI3D = PartListArticleBarcodeI3D,
IsActive = true,
}
};
childItem.InternalPosition = 1;
childItem.Indent = 1;
childItem.QuantityComplete = 2;
childItem.Barcodes = new List<ReceiptItemBarcode>
{
new()
{
BarcodeI3D = ChildArticleBarcodeI3D1,
IsActive = true,
OwnerBarcodeI3D = PartListArticleBarcodeI3D
},
new()
{
BarcodeI3D = ChildArticleBarcodeI3D2,
IsActive = true,
OwnerBarcodeI3D = PartListArticleBarcodeI3D
},
};
order.Items = new List<ReceiptOrderItemDTO>
{
partListItem,
childItem
};
return order;
}
public static ReceiptDeliveryListDTO ForwardOrderToDeliveryList(int orderI3D) => (ReceiptDeliveryListDTO)ForwardReceipt(CentronObjectKindNumeric.OrderClass, orderI3D, CentronObjectKindNumeric.DeliveryListClass);
public static ReceiptInvoiceDTO ForwardDeliveryListToInvoice(int deliveryListI3D) => (ReceiptInvoiceDTO)ForwardReceipt(CentronObjectKindNumeric.DeliveryListClass, deliveryListI3D, CentronObjectKindNumeric.InvoiceClass);
public static ReceiptBaseDTO ForwardReceipt(CentronObjectKindNumeric fromKind, int fromI3D, CentronObjectKindNumeric toKind)
{
using var session = new BLSession();
return session.GetBL<ReceiptWebServiceBL>().ForwardReceipt(
toKind,
CommonMethodsHelper.GetUser(session).User,
new ForwardReceiptData
{
IgnoreCallbacks = true,
CreateReceiptData = new CreateReceiptData
{
IgnoreCallbacks = true,
},
CreateReceiptItemsFromExistingItemsData = new List<CreateReceiptItemsFromExistingItemsData>
{
new()
{
IgnoreCallbacks = true,
},
},
},
new List<ReceiptToForward>
{
new()
{
ReceiptKind = fromKind,
ReceiptI3D = fromI3D
},
},
receiptProjectLayoutItemI3DsToForward: null,
InsertReceiptTakeoverOptions.Reference,
onlyTakeoverAvailableQuantity: false,
ignoreDefaultContract: true).ThrowIfError().Receipt;
}
public static ReceiptBaseDTO SaveReceipt(ReceiptBaseDTO receipt)
{
using var session = new BLSession();
return session.GetBL<ReceiptWebServiceBL>().SaveReceipt(
receipt,
CommonMethodsHelper.GetUser(session).User,
new SaveReceiptData(),
autoLockIfNewReceipt: false,
CreatedThroughApplication.WebServices,
receiptTemplateFolderI3D: null).ThrowIfError().Receipt;
}
public static ResultException SaveReceiptShouldFail(ReceiptBaseDTO receipt)
{
try
{
SaveReceipt(receipt);
throw new Exception("This should not be reached. An error was expected in SaveReceipt");
}
catch (ResultException exception)
{
return exception;
}
}
public static ReceiptBaseDTO CreateNewVersion(CentronObjectKindNumeric receiptKind, int receiptI3D)
{
using var session = new BLSession();
return session.GetBL<ReceiptWebServiceBL>().CreateNewVersion(
receiptKind,
receiptI3D,
version: null,
newContactPersonI3D: null,
CommonMethodsHelper.GetUser(session).User,
new CreateNewVersionData
{
IgnoreCallbacks = true,
}).ThrowIfError().Receipt;
}
public static void AssertBarcodesInPartList() => AssertBarcodes(barcode1InPartList:true, barcode2InPartList:true);
public static void AssertBarcodesNotInPartList() => AssertBarcodes(barcode1InPartList:false, barcode2InPartList:false);
public static void AssertBarcodes(bool barcode1InPartList, bool barcode2InPartList, int? mainBarcodeI3D = null)
{
using var session = new BLSession();
mainBarcodeI3D ??= PartListArticleBarcodeI3D;
var mainBarcode = session.GetBL<BarcodeBL>().GetBarCode2ByI3D(mainBarcodeI3D.Value);
var alternativeBarcode = session.GetBL<BarcodeBL>().GetBarCode2ByI3D(mainBarcodeI3D.Value == PartListArticleBarcodeI3D ? PartListArticleAlternativeBarcodeI3D : PartListArticleBarcodeI3D);
var childBarcode1 = session.GetBL<BarcodeBL>().GetBarCode2ByI3D(ChildArticleBarcodeI3D1);
var childBarcode2 = session.GetBL<BarcodeBL>().GetBarCode2ByI3D(ChildArticleBarcodeI3D2);
if (barcode1InPartList || barcode2InPartList)
{
Assert.Equal(1, mainBarcode.SNPartsList);
}
else
{
Assert.True(mainBarcode.SNPartsList is null or 0);
}
Assert.True(alternativeBarcode.SNPartsList is null or 0);
if (barcode1InPartList)
{
Assert.Equal(mainBarcodeI3D.Value, childBarcode1.OwnerPositionI3D);
}
else
{
Assert.Null(childBarcode1.OwnerPositionI3D);
}
if (barcode2InPartList)
{
Assert.Equal(mainBarcodeI3D.Value, childBarcode2.OwnerPositionI3D);
}
else
{
Assert.Null(childBarcode2.OwnerPositionI3D);
}
}
public static void SplitUpPartList(ReceiptBaseDTO receipt)
{
var items = receipt.GetReceiptItems();
items[0].Set((IReceiptItemWithFormatting f) => f.Expanded, null);
items[1].Set((IReceiptItemWithFormatting f) => f.Indent, 0);
items[1].Get((IReceiptItemWithBarcodes f) => f.Barcodes)[0].OwnerBarcodeI3D = null;
items[1].Get((IReceiptItemWithBarcodes f) => f.Barcodes)[1].OwnerBarcodeI3D = null;
}
public static void CreatePartList(ReceiptBaseDTO receipt)
{
var items = receipt.GetReceiptItems();
items[0].Set((IReceiptItemWithFormatting f) => f.Expanded, true);
items[1].Set((IReceiptItemWithFormatting f) => f.Indent, 1);
items[1].Get((IReceiptItemWithBarcodes f) => f.Barcodes)[0].OwnerBarcodeI3D = PartListArticleBarcodeI3D;
items[1].Get((IReceiptItemWithBarcodes f) => f.Barcodes)[1].OwnerBarcodeI3D = PartListArticleBarcodeI3D;
}
}