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.DeliveryLists; using Centron.Data.WebServices.Sales.Receipts.Orders; using Centron.Interfaces; using Centron.Interfaces.Administration.Environment; using Centron.Interfaces.BL; using Centron.Tests.EndToEnd.Infrastructure; using Xunit; using Xunit.Abstractions; namespace Centron.Tests.EndToEnd.TicketTests.Ticket119088 { public class Ticket119088Test : EndToEndTest { public Ticket119088Test(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } public override void Execute() { this.NewReceipt(); this.NewVersion(); } private void NewReceipt() { using (var session = new BLSession()) { // Create delivery-list var user = session.GetBL().GetAppUser(f => f.I3D == 11); var result = session.GetBL().CreateNewReceipt(CentronObjectKindNumeric.DeliveryListClass, new LoggedInUser(user), 10020, new CreateReceiptData(), null, null, true, false, true); var deliveryList = (ReceiptDeliveryListDTO) result.Data.Receipt; deliveryList.PurchaseOrderNumber = "10"; //Already exists in the database // Save delivery-list using (var saveSession = new BLSession()) { var saveResult = saveSession.GetBL().SaveReceipt( deliveryList, user, new SaveReceiptData(){InsertFreightArticle = false}, //Do not set IgnoreCallbacks to true, because we want to validate a callback but not the freightarticle callback autoLockIfNewReceipt: false, CreatedThroughApplication.CentronNet, receiptTemplateFolderI3D: null); Assert.Equal(ResultStatus.Error, saveResult.Status); Assert.NotEmpty(saveResult.Data.DuplicatePurchaseOrderNumberReceipts); this.Verifier.Verify("DuplicatePurchaseOrderNumberReceipts", saveResult.Data.DuplicatePurchaseOrderNumberReceipts); } } } private void NewVersion() { ReceiptOrderDTO order; using (var session = new BLSession()) { // Create delivery-list var user = session.GetBL().GetAppUser(f => f.I3D == 11); var newVersionResult = session.GetBL().CreateNewVersion(CentronObjectKindNumeric.OrderClass, 1309, null, null, user, new CreateNewVersionData { IgnoreCallbacks = true }); order = (ReceiptOrderDTO)newVersionResult.Data.Receipt; } // Try saving the order with a different PurchaseOrderNumber // The check for duplicate PurchaseOrderNumbers should kick in order.PurchaseOrderNumber = "1234567"; //Already exists in the database for this customer using (var saveSession = new BLSession()) { var user = saveSession.GetBL().GetAppUser(f => f.I3D == 11); var saveResult = saveSession.GetBL().SaveReceipt( order, user, new SaveReceiptData(), //Do not set IgnoreCallbacks to true, because we want to validate a callback autoLockIfNewReceipt: false, CreatedThroughApplication.CentronNet, receiptTemplateFolderI3D: null); Assert.Equal(ResultStatus.Error, saveResult.Status); Assert.NotEmpty(saveResult.Data.DuplicatePurchaseOrderNumberReceipts); this.Verifier.Verify("NewVersion_DuplicatePurchaseOrderNumberReceipts", saveResult.Data.DuplicatePurchaseOrderNumberReceipts); } // Try saving the order with the original purchaseOrderNumber (that already exists too) // The check for duplicate PurchaseOrderNumbers should NOT kick in, because even tho this number already exists in the database // it wasn't changed by the user, he just created a new version and possibly changed something unrelated // He then shouldn't get a warning for duplicate PurchaseOrderNumber order.PurchaseOrderNumber = "Telefonisch Herr Meier"; //The same PurchaseOrderNumber as this order has in the database using (var saveSession = new BLSession()) { var user = saveSession.GetBL().GetAppUser(f => f.I3D == 11); var saveResult = saveSession.GetBL().SaveReceipt( order, user, new SaveReceiptData(), //Do not set IgnoreCallbacks to true, because we want to validate a callback autoLockIfNewReceipt: false, CreatedThroughApplication.CentronNet, receiptTemplateFolderI3D: null); Assert.Equal(ResultStatus.Success, saveResult.Status); Assert.Empty(saveResult.Data.DuplicatePurchaseOrderNumberReceipts); } } } }