using System.Linq; using Centron.BusinessLogic; using Centron.BusinessLogic.EmployeeArea; using Centron.BusinessLogic.Sales.Receipts.DataAndResults; using Centron.BusinessLogic.WebServices.Sales.Receipts; using Centron.Data.Entities.Administration.Logins; using Centron.Interfaces; using Centron.Interfaces.Administration.Environment; using Centron.Interfaces.BL; using Centron.Interfaces.Sales.Receipts; using Centron.Tests.EndToEnd.Infrastructure; using CentronSoftware.Centron.WebServices.Extensions; using Xunit; using Xunit.Abstractions; namespace Centron.Tests.EndToEnd.TicketTests.Ticket155581; /// /// Ticket 155581 (Punkt a): Wenn die "Lagerbuchung umschalten"-Aktion auf einer Vertragsposition /// die Abbuchung (ChangeStock) flippt, muss beim Speichern ein Eintrag in AnlageLog /// mit Art = ArticlePropertyUpdated (91) entstehen. /// public class Ticket155581ContractPositionChangeStockTogglesAreLoggedTest : EndToEndTest { private const int ContractI3D = 30; private const int AppUserI3D = 11; public Ticket155581ContractPositionChangeStockTogglesAreLoggedTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } public override void Execute() { var user = WithSession(s => s.GetBL().GetAppUser(f => f.I3D == AppUserI3D)); var loggedIn = new LoggedInUser(user); var contractResult = WithSession(s => s.GetBL().GetReceiptByI3D(ContractI3D, CentronObjectKindNumeric.ContractClass, loggedIn)); Assert.Equal(ResultStatus.Success, contractResult.Status); var contract = contractResult.Data; var item = contract.GetReceiptItems().FirstOrDefault(f => f.I3D > 0 && f.ArticleI3D.HasValue); Assert.NotNull(item); var originalChangeStock = item.ChangeStock; item.ChangeStock = !originalChangeStock; var logFilter = $"AnlageI3D = {ContractI3D} AND AnlageArt = {(int)CentronObjectKindNumeric.ContractClass} AND Art = {(int)ReceiptLogKind.ArticlePropertyUpdated} AND Beschreibung LIKE N'%Lagerbuchung%'"; var logCountBefore = Sql($"SELECT COUNT(*) FROM AnlageLog WHERE {logFilter}"); var saveResult = WithSession(s => s.GetBL().SaveReceipt( contract, user, new SaveReceiptData { IgnoreCallbacks = true }, autoLockIfNewReceipt: false, application: CreatedThroughApplication.CentronNet, receiptTemplateFolderI3D: null)); Assert.Equal(ResultStatus.Success, saveResult.Status); var logCountAfter = Sql($"SELECT COUNT(*) FROM AnlageLog WHERE {logFilter}"); Assert.True(logCountAfter > logCountBefore, $"Expected new AnlageLog entry for ChangeStock toggle. Before={logCountBefore}, After={logCountAfter}."); } }