using System; using System.Collections.Generic; 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.Data.WebServices.Sales.Receipts.Offers; using Centron.Data.WebServices.Sales.Receipts.Orders; using Centron.Interfaces; using Centron.Interfaces.Administration.Environment; using Centron.Interfaces.BL; 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 Xunit; using Xunit.Abstractions; namespace Centron.Tests.EndToEnd.Tests.ReceiptTodos { public class ReceiptTodosTest : EndToEndTest { public ReceiptTodosTest(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { //Ignore TodoListe columns this.Verifier.Settings.IgnoreColumn("Datum"); this.Verifier.Settings.IgnoreColumn("BearbeitungsDatum"); this.Verifier.Settings.IgnoreColumn("ErstellDatum"); this.Verifier.Settings.IgnoreColumn("Termin"); this.Verifier.Settings.IgnoreColumn("ErstelltVersion"); this.Verifier.Settings.IgnoreColumn("GeaendertVersion"); } private const int OrderI3D = 4383; public override void Execute() { this.CreateNewOrder(); this.VerifyTodoTable("CreatedOrder", expectedCountOfTodos:3); //DeliveryDate, ReminderDate and Commissioning this.CreateNewVersion(); this.VerifyTodoTable("NewVersion", expectedCountOfTodos:3); //DeliveryDate, ReminderDate and Commissioning, there should be no duplicates this.ForwardOrderToInvoice(); this.VerifyTodoTable("ForwardedToInvoice", expectedCountOfTodos:0); //After forwarding the receipt, it should delete all entries } private void CreateNewOrder() { using (var session = new BLSession()) { var user = session.GetBL().GetAppUser(f => f.I3D == 11); var result = session.GetBL().CreateNewReceipt(CentronObjectKindNumeric.OrderClass, new LoggedInUser(user), 10022, new CreateReceiptData(), null, null, true, false, true); Assert.Equal(ResultStatus.Success, result.Status); Assert.NotNull(result.Data?.Receipt); var order = (ReceiptOrderDTO) result.Data.Receipt; order.ReminderDate = new DateTime(2021, 1, 20); order.Date = new DateTime(2021, 1, 1); var articleReceiptItems = session.GetBL().CreateArticleReceiptItems(order, false, 1256, null, null, -1, new LoggedInUser(user)).Data.ReceiptItems; order.Items.AddRange(articleReceiptItems.Cast()); using (var saveSession = new BLSession()) { var saveResult = session.GetBL().SaveReceipt(order, user, new SaveReceiptData { IgnoreCallbacks = true }, false, CreatedThroughApplication.CentronNet, null); Assert.Equal(ResultStatus.Success, saveResult.Status); Assert.NotNull(saveResult.Data?.Receipt); } } } private void CreateNewVersion() { using (var session = new BLSession()) { var user = session.GetBL().GetAppUser(f => f.I3D == 11); var result = session.GetBL().CreateNewVersion(CentronObjectKindNumeric.OrderClass, OrderI3D, null, null, user, new CreateNewVersionData { IgnoreCallbacks = true }); Assert.Equal(ResultStatus.Success, result.Status); Assert.NotNull(result.Data?.Receipt); Assert.Equal(2, result.Data.Receipt.Version); //Should have version 2 now using (var saveSession = new BLSession()) { var saveResult = session.GetBL().SaveReceipt(result.Data.Receipt, user, new SaveReceiptData { IgnoreCallbacks = true }, false, CreatedThroughApplication.CentronNet, null); Assert.Equal(ResultStatus.Success, saveResult.Status); Assert.NotNull(saveResult.Data?.Receipt); } } } private void ForwardOrderToInvoice() { using (var session = new BLSession()) { var user = session.GetBL().GetAppUser(f => f.I3D == 11); var result = session.GetBL().ForwardReceipt( CentronObjectKindNumeric.InvoiceClass, user, new ForwardReceiptData { IgnoreCallbacks = true, CreateReceiptData = new CreateReceiptData { IgnoreCallbacks = true }, CreateReceiptItemsFromExistingItemsData = new List { new() { IgnoreCallbacks = true, }, }, }, new List { new ReceiptToForward { ReceiptI3D = OrderI3D, ReceiptKind = CentronObjectKindNumeric.OrderClass, ReceiptItemI3Ds = null } }, receiptProjectLayoutItemI3DsToForward: null, InsertReceiptTakeoverOptions.Reference, onlyTakeoverAvailableQuantity:false, ignoreDefaultContract:false); Assert.Equal(ResultStatus.Success, result.Status); Assert.NotNull(result.Data?.Receipt); using (var saveSession = new BLSession()) { var saveResult = session.GetBL().SaveReceipt(result.Data.Receipt, user, new SaveReceiptData { IgnoreCallbacks = true }, false, CreatedThroughApplication.CentronNet, null); Assert.Equal(ResultStatus.Success, saveResult.Status); Assert.NotNull(saveResult.Data?.Receipt); } } } private void VerifyTodoTable(string name, int expectedCountOfTodos) { this.Verifier.VerifyTable(name, "dbo.TodoListe", $"ObjektArt = {(int)CentronObjectKindNumeric.OrderClass} AND ObjectI3D = {OrderI3D}"); var actualCount = this.Sql($"SELECT COUNT(*) FROM dbo.TodoListe WHERE ObjektArt = {(int) CentronObjectKindNumeric.OrderClass} AND ObjectI3D = {OrderI3D}"); Assert.Equal(expectedCountOfTodos, actualCount); } } }