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
This commit is contained in:
Christoph Schwörer
2026-08-26 07:43:51 +02:00
parent 18edae75b6
commit f045b99a25
24664 changed files with 5846716 additions and 1 deletions
@@ -0,0 +1,688 @@
using Centron.BusinessLogic.Sales.Receipts.Internal;
using Centron.BusinessLogic.WebServices;
using Centron.DAO;
using Centron.DAO.Mappings;
using Centron.DAO.Mappings.Accounts;
using Centron.DAO.Mappings.Administration;
using Centron.DAO.Mappings.Administration.Company;
using Centron.DAO.Mappings.Administration.Employees;
using Centron.DAO.Mappings.Administration.Settings;
using Centron.DAO.Mappings.CustomerArea;
using Centron.DAO.Mappings.CustomerArea.Support;
using Centron.DAO.Mappings.Sales.Receipts;
using Centron.DAO.Mappings.States;
using Centron.DAO.Mappings.TemporaryEntities;
using Centron.Data.Entities.Accounts;
using Centron.Data.Entities.Administration.MasterData;
using Centron.Data.Entities.BusinessPartner;
using Centron.Data.Entities.CustomerArea;
using Centron.Data.Entities.Sales.Receipts;
using Centron.Data.Entities.Sales.Receipts.Invoices;
using Centron.Data.Entities.Sales.Receipts.Offers;
using Centron.Data.Entities.Sales.Receipts.SupplierInvoices;
using Centron.Tests.BL.DatabaseMappings;
using CentronSoftware.Centron.WebServices.Entities.Sales.Receipts.ReceiptReceiver;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using JetBrains.Annotations;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
namespace Centron.Tests.BL.Sales.Receipts.Internal;
[TestSubject(typeof(ReceiptAddressAndContactPersonHelperBL))]
public class ReceiptAddressAndContactPersonHelperBLTest
{
[Fact]
public void ReceiptCanBeConvertedToStructuredReceiptReceiver()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = ""
};
var receipt = "Tree\nDepartment \nJohn Doe\nContact Department\nMain Street 123a\n12345 Munich\n";
var result = receiptAddressAndContactPersonHelperBl.ConvertReceiverToReceiptReceiver(receipt, 2, 4, false);
Assert.Equivalent(expectedReceiptReceiver, result);
}
[Fact]
public void ReceiptReceiverCanBeUpdated()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0,
CustomerI3D = 5
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptOffer() { CustomerI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
var receiptReceiverDto = receiptAddressAndContactPersonHelperBl.CreateReceiverObject(false, true, 5, "Tree", 2, 4);
var expectedDto = ObjectMapper.Map<ReceiptReceiver, ReceiptReceiverDTO>(expectedReceiptReceiver);
expectedDto.ReceiverText = receiptAddressAndContactPersonHelperBl.CreateReceiverTextFromDTO(expectedDto);
Assert.Equivalent(expectedDto, receiptReceiverDto);
}
[Fact]
public void ReceiptReceiverCanHandleUniCode()
{
var session = CreateSession();
var country = new Country()
{
Name = "China"
};
session.Save(country, 1);
var address = new Address()
{
Street = "香港葵涌大連排金龙工业中心二期12楼L室",
Zip = "12345",
City = "HongKong",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartment = true,
PrintDepartmentContact = 1,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Foreign",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Foreign Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Foreign",
ContactName = "John Doe",
ContactDepartment = "Foreign Contact Department",
Street = "香港葵涌大連排金龙工业中心二期",
HouseNumber = "12楼L室",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "HongKong",
Country = "China",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptOffer() { CustomerI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
}
[Fact]
public void UpdatingReceiptReceiverCanHandleAlternativeAddresses()
{
var session = CreateSession();
var expectedReceiptReceiverDelivery = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department Delivery",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
FederalState = string.Empty
};
var expectedReceiptReceiverInvoice = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department Invoice",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
FederalState = string.Empty
};
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
var accountCustomer = new AccountCustomer
{
Number = 5,
ReceiptReceiverDelivery = expectedReceiptReceiverDelivery,
ReceiptReceiverInvoice = expectedReceiptReceiverInvoice
};
session.Save(accountCustomer, 7);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptInvoice()
{
CustomerI3D = 5,
AddressI3D = 2,
ContactPersonI3D = 4,
InvoiceAddressAddressI3D = 1,
InvoiceAddressContactPersonI3D = 1,
DeliveryAddressAddressI3D = 1,
DeliveryAddressContactPersonI3D = 1,
Receiver = "receiver",
InvoiceAddress = "",
DeliveryAddress = "",
ReceiptReceiverInvoice = expectedReceiptReceiverInvoice,
ReceiptReceiverDelivery = expectedReceiptReceiverDelivery
};
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
var receiptWithInvoiceAddressUsed = new ReceiptInvoice()
{
CustomerI3D = 5,
AddressI3D = 1,
ContactPersonI3D = 1,
InvoiceAddressAddressI3D = 2,
InvoiceAddressContactPersonI3D = 4,
DeliveryAddressAddressI3D = 1,
DeliveryAddressContactPersonI3D = 1,
Receiver = "receiver",
InvoiceAddress = "receiver",
DeliveryAddress = "",
ReceiptReceiverInvoice = expectedReceiptReceiverInvoice,
ReceiptReceiverDelivery = expectedReceiptReceiverDelivery
};
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receiptWithInvoiceAddressUsed);
Assert.Equivalent(expectedReceiptReceiverInvoice, receiptWithInvoiceAddressUsed.ReceiptReceiver);
var receiptWithDeliveryAddressUsed = new ReceiptInvoice()
{
CustomerI3D = 5,
AddressI3D = 1,
ContactPersonI3D = 1,
InvoiceAddressAddressI3D = 1,
InvoiceAddressContactPersonI3D = 1,
DeliveryAddressAddressI3D = 2,
DeliveryAddressContactPersonI3D = 4,
Receiver = "receiver",
InvoiceAddress = "",
DeliveryAddress = "receiver",
ReceiptReceiverInvoice = expectedReceiptReceiverInvoice,
ReceiptReceiverDelivery = expectedReceiptReceiverDelivery
};
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receiptWithDeliveryAddressUsed);
Assert.Equivalent(expectedReceiptReceiverDelivery, receiptWithDeliveryAddressUsed.ReceiptReceiver);
}
[Fact]
public void HouseNumberCanBeBeforeStreet()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var address = new Address()
{
Street = "123b Main Street",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = true,
PostOfficeBox = "Box",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var departement = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(departement, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = departement,
Address = address
};
session.Save(contact, 4);
var supplier = new Supplier()
{
Name = "Tree"
};
session.Save(supplier, 5);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123b",
HasPostOfficeBox = true,
PostOfficeBox = "Box",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = null,
AccountI3D = null,
SupplierNumber = 5,
FederalState = string.Empty
};
var receipt = new ReceiptSupplierInvoice() { SupplierI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
}
[Fact]
public void ContactPersonDepartmentAndCompanyNameCanBeSuppressed()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = false,
PrintContactPerson = false,
PrintDepartment = false,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0,
CustomerI3D = 5
};
session.Save(address, 2);
var departement = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(departement, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = departement,
Address = address
};
session.Save(contact, 4);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "",
Department = "",
ContactName = "",
ContactDepartment = "",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptInvoice() { CustomerI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
var receiptReceiverDto = receiptAddressAndContactPersonHelperBl.CreateReceiverObject(false, true, 5, "", 2, 4);
var expectedDto = ObjectMapper.Map<ReceiptReceiver, ReceiptReceiverDTO>(expectedReceiptReceiver);
expectedDto.ReceiverText = receiptAddressAndContactPersonHelperBl.CreateReceiverTextFromDTO(expectedDto);
Assert.Equivalent(expectedDto, receiptReceiverDto);
}
[Fact]
public void ReceiptReceiverCanHandleMissingValues()
{
var session = CreateSession();
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "",
ContactName = "",
ContactDepartment = "",
Street = "",
HouseNumber = "",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "",
City = "",
Country = "",
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptOffer() { CustomerI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
// Test with a different customer number (5 instead of 10000 to match the actual customer)
var receiptReceiverDto = receiptAddressAndContactPersonHelperBl.CreateReceiverObject(false, true, 5, "Tree", 2, 4);
var expectedDto = ObjectMapper.Map<ReceiptReceiver, ReceiptReceiverDTO>(expectedReceiptReceiver);
expectedDto.ReceiverText = receiptAddressAndContactPersonHelperBl.CreateReceiverTextFromDTO(expectedDto);
Assert.Equivalent(expectedDto, receiptReceiverDto);
}
public ISession CreateSession()
{
var fluentConfiguration = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory)
.Mappings(m => m.FluentMappings.Add<AddressMaps>())
.Mappings(m => m.FluentMappings.Add<CountryMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptReceiverMaps>())
.Mappings(m => m.FluentMappings.Add<ContactPersonMaps>())
.Mappings(m => m.FluentMappings.Add<EmployeeCompactMaps>())
.Mappings(m => m.FluentMappings.Add<AppUserMaps>())
.Mappings(m => m.FluentMappings.Add<SupportLevelMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerDepartmentMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerSalutationMaps>())
.Mappings(m => m.FluentMappings.Add<MandatorMaps>())
.Mappings(m => m.FluentMappings.Add<FederalStateMaps>())
.Mappings(m => m.FluentMappings.Add<AppUserGroupMaps>())
.Mappings(m => m.FluentMappings.Add<AppRightMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerCompactMaps>())
.Mappings(m => m.FluentMappings.Add<SupplierMaps>())
.Mappings(m => m.FluentMappings.Add<AccountCustomerMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AppSettingMaps>())
.Mappings(m => m.FluentMappings.Add<AppSettingDataMaps>())
.Mappings(m => m.FluentMappings.Add<ApplicationSettingMaps>())
.Mappings(m => m.FluentMappings.Add<AccountSearchItemAccMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AccountTypeToAccountMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AccountSupplierMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AccountAddressMaps>())
.Mappings(m => m.FluentMappings.Add<AccountAddressContactMaps>())
.Mappings(m => m.FluentMappings.Add<GeoInfoMaps>())
;
ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
new SchemaExport(fluentConfiguration.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out);
return session;
}
}
@@ -0,0 +1,28 @@
using Centron.BusinessLogic.Sales.Receipts.Internal;
using Centron.Interfaces;
using Centron.Interfaces.Warehousing;
namespace Centron.Tests.BL.Sales.Receipts.Internal;
public class ReceiptBarcodeBLTest
{
[Theory]
[InlineData(BarcodeState.InDeliveryList, true)]
[InlineData(BarcodeState.InStock, false)]
[InlineData(BarcodeState.LostAtStocktaking, false)]
[InlineData(BarcodeState.ManuallyBookedOut, false)]
public void ShouldUpdateBarcode_ForPickupList_OnlyAllowsBarcodeInDeliveryList(BarcodeState currentState, bool expected)
{
bool result = ReceiptBarcodeBL.ShouldUpdateBarcode(CentronObjectKindNumeric.PickupListClass, currentState);
Assert.Equal(expected, result);
}
[Fact]
public void ShouldUpdateBarcode_ForOtherReceiptKind_DoesNotRestrictBarcodeState()
{
bool result = ReceiptBarcodeBL.ShouldUpdateBarcode(CentronObjectKindNumeric.CreditVoucherClass, BarcodeState.ManuallyBookedOut);
Assert.True(result);
}
}
@@ -0,0 +1,53 @@
using System.Linq.Expressions;
using Centron.BusinessLogic.Sales.Receipts.Internal;
using Centron.Data.Entities.Sales.Receipts.DeliveryLists;
using Centron.Interfaces.Sales.Receipts.DeliveryLists;
namespace Centron.Tests.BL.Sales.Receipts.Internal;
public class ReceiptExpressionHelperTest
{
[Fact]
public void GetExpression_RewritesArrayContainsForReceiptFilters()
{
int[] receiptItemI3Ds = [1, 2];
Expression<Func<ReceiptDeliveryList, bool>> filter =
receipt => receipt.Items.Any(item => receiptItemI3Ds.Contains(item.I3D));
var result = ReceiptExpressionHelper.GetExpression<ReceiptDeliveryList, IReceiptDeliveryList>(filter);
Assert.NotNull(result);
Assert.False(ContainsArrayContainsOrImplicitConversion(result));
}
private static bool ContainsArrayContainsOrImplicitConversion(Expression expression)
{
var visitor = new ArrayContainsOrImplicitConversionFinder();
visitor.Visit(expression);
return visitor.Found;
}
private sealed class ArrayContainsOrImplicitConversionFinder : ExpressionVisitor
{
public bool Found { get; private set; }
protected override Expression VisitMethodCall(MethodCallExpression node)
{
if (node.Method.Name == "op_Implicit")
{
Found = true;
return node;
}
if (node.Method.Name == "Contains" && node.Arguments.Count > 0)
{
var source = node.Object ?? node.Arguments[0];
if (source.Type.IsArray)
Found = true;
}
return base.VisitMethodCall(node);
}
}
}
@@ -0,0 +1,295 @@
using Centron.BusinessLogic.Sales.Receipts.Internal;
using Centron.DAO;
using Centron.DAO.Mappings;
using Centron.DAO.Mappings.Accounts;
using Centron.DAO.Mappings.Administration;
using Centron.DAO.Mappings.Administration.Company;
using Centron.DAO.Mappings.Administration.Employees;
using Centron.DAO.Mappings.CustomerArea;
using Centron.DAO.Mappings.CustomerArea.Support;
using Centron.DAO.Mappings.Sales.Receipts;
using Centron.DAO.Mappings.States;
using Centron.Tests.BL.DatabaseMappings;
using Centron.Data.Entities.Accounts;
using Centron.Data.Entities.CustomerArea;
using Centron.Interfaces.Accounts;
using Centron.Interfaces.BL;
using Centron.BusinessLogic.WebServices.Sales.Receipts.DataAndResults;
using Centron.DAO.Mappings.Administration.Settings;
using Centron.DAO.Mappings.Sales.Receipts.ContractLists;
using Centron.DAO.Mappings.Sales.Receipts.CreditVouchers;
using Centron.DAO.Mappings.Sales.Receipts.DeliveryLists;
using Centron.DAO.Mappings.Sales.Receipts.Invoices;
using Centron.DAO.Mappings.Sales.Receipts.Offers;
using Centron.DAO.Mappings.Sales.Receipts.Orders;
using Centron.DAO.Mappings.Sales.Receipts.PickupLists;
using Centron.DAO.Mappings.TemporaryEntities;
using Centron.Data.Entities.Administration.MasterData;
using Centron.Data.Entities.Sales.Receipts;
using Centron.Data.Entities.Sales.Receipts.Offers;
using Centron.Interfaces.Sales.Receipts;
using Centron.Tests.BL.Fixtures;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using JetBrains.Annotations;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
using AccountType = Centron.Data.Entities.Accounts.AccountType;
namespace Centron.Tests.BL.Sales.Receipts.Internal;
[TestSubject(typeof(ReceiptReceiverUpdaterBL))]
public class ReceiptReceiverUpdaterBLTest : LicenseManagerFixture
{
[Fact]
public void FindReceiptReceiverForCustomerAccounts_ReturnsUpdates_ForAlternativeReceivers()
{
var session = CreateSession();
var country = new Country() { Name = "Deutschland" };
session.Save(country, 1);
var address = new AccountAddress()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
PrintDepartment = true,
PostOfficeBox = string.Empty,
CountryI3D = 1,
};
session.Save(address, 2);
var contact = new AccountAddressContact()
{
Firstname = "John",
Lastname = "Doe",
DepartmentText = "Dept",
};
session.Save(contact, 3);
var account = new Account()
{
I3D = 100,
Name = "Main Account",
Number = 1,
IsActive = true,
IsLocked = false
};
session.Save(account, 100);
var accountType = new AccountType()
{
Name = "Kunde",
I3D = 200,
Kind = AccountTypeKind.Customer
};
session.Save(accountType, 200);
var accountCustomer = new AccountCustomer()
{
I3D = 300,
AlternativeDeliveryReceiver = "Main Account\nDept\nJohn Doe\nMain Street 123a\n12345 Munich",
AlternativeDeliveryAddressI3D = 2,
AlternativeDeliveryAddressContactI3D = 3,
AlternativeDeliveryAccountI3D = 100,
AlternativeInvoiceReceiver = "Dept\nMr John Doe\nMain Street 123a\n12345 Munich",
AlternativeInvoiceAddressI3D = 2,
AlternativeInvoiceAddressContactI3D = 3,
AlternativeInvoiceAccountI3D = 100
};
session.Save(accountCustomer, 300);
var typeBinding = new AccountTypeToAccount()
{
I3D = 400,
AccountI3D = 100,
AccountTypeI3D = 200,
AccountCustomerI3D = 300
};
session.Save(typeBinding, 400);
session.Flush();
var daoSession = new DAOSession(session);
var bl = new ReceiptReceiverUpdaterBL(daoSession);
var result = bl.FindReceiptReceiverForCustomerAccounts();
Assert.Equal(ResultStatus.Success, result.Status);
Assert.NotNull(result.Data);
Assert.Equal(2, result.Data.Count);
var delivery = result.Data.First(f => f.Type == ReceiptReceiverUpdateInformation.ReceiptReceiverType.Delivery);
Assert.True(delivery.Update);
Assert.Equal("Main Account\nDept\nJohn Doe\nMain Street 123a\n12345 Munich", delivery.Receiver);
Assert.NotNull(delivery.ReceiptReceiver);
Assert.Equal("Main Account", delivery.ReceiptReceiver.CompanyName);
var invoice = result.Data.First(f => f.Type == ReceiptReceiverUpdateInformation.ReceiptReceiverType.Invoice);
Assert.False(invoice.Update);
Assert.Equal("Dept\nMr John Doe\nMain Street 123a\n12345 Munich", invoice.Receiver);
Assert.Null(invoice.ReceiptReceiver);
Assert.Equal("Nicht erkannte Zeilen: " + Environment.NewLine + "Mr John Doe" + Environment.NewLine + "Mögliche Zeilen: " + Environment.NewLine + "John Doe, " + Environment.NewLine + "Deutschland, " + Environment.NewLine + "Main Account", invoice.Message);
}
[Fact]
public void FindReceiptReceiverForReceipts_ReturnsUpdates_ForAlternativeReceivers()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
var receipt = new ReceiptOffer()
{
CustomerI3D = 5,
DeliveryAddress = "Tree\nContact Department\nJohn Doe\nMain Street 123a\n12345 Munich",
DeliveryAddressCustomerI3D = 5,
DeliveryAddressAddressI3D = 2,
DeliveryAddressContactPersonI3D = 4,
InvoiceAddress = "Tree\nContact Department\nMr John Doe\nMain Street 123a\n12345 Munich",
InvoiceAddressCustomerI3D = 5,
InvoiceAddressAddressI3D = 2,
InvoiceAddressContactPersonI3D = 4,
Receiver = "Receiver",
Phone = "1234",
Fax = "1234",
Email = "test@test.de",
CreatedThroughApplicationVersion = "2.0.0",
ChangedThroughApplicationVersion = "2.0.0",
CurrencyString = "€",
Street = "Street",
PostOfficeBox = "",
City = "City",
Zip = "12345",
ContactName = "Name",
Information = "",
Number = 1234,
Date = DateTime.Now,
Version = 1,
State = ReceiptState.Active,
BranchOrigin = BranchOrigin.Creator,
CurrencyFactor = 1,
PurchaseOrderNumber = "1234",
};
session.Save(receipt, 7);
var provisionSchema = new ReceiptProvisionSchema
{
Name = "Schema",
};
session.Save(provisionSchema, 8);
session.Flush();
var daoSession = new DAOSession(session);
var bl = new ReceiptReceiverUpdaterBL(daoSession);
var result = bl.FindReceiptReceiverForReceipts();
Assert.Equal(ResultStatus.Success, result.Status);
Assert.NotNull(result.Data);
Assert.Equal(3, result.Data.Count);
var delivery = result.Data.First(f => f.Type == ReceiptReceiverUpdateInformation.ReceiptReceiverType.Delivery);
Assert.True(delivery.Update);
Assert.Equal("Tree\nContact Department\nJohn Doe\nMain Street 123a\n12345 Munich", delivery.Receiver);
Assert.NotNull(delivery.ReceiptReceiver);
Assert.Equal("Tree", delivery.ReceiptReceiver.CompanyName);
var invoice = result.Data.First(f => f.Type == ReceiptReceiverUpdateInformation.ReceiptReceiverType.Invoice);
Assert.False(invoice.Update);
Assert.Equal("Tree\nContact Department\nMr John Doe\nMain Street 123a\n12345 Munich", invoice.Receiver);
Assert.Null(invoice.ReceiptReceiver);
Assert.Equal("Nicht erkannte Zeilen: " + Environment.NewLine + "Mr John Doe" + Environment.NewLine + "Mögliche Zeilen: " + Environment.NewLine + "John Doe, " + Environment.NewLine + "Department, " + Environment.NewLine + "Deutschland" , invoice.Message);
}
public ISession CreateSession()
{
var fluentConfiguration = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory)
.Mappings(m => m.FluentMappings.Add<AddressMaps>())
.Mappings(m => m.FluentMappings.Add<CountryMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptReceiverMaps>())
.Mappings(m => m.FluentMappings.Add<ContactPersonMaps>())
.Mappings(m => m.FluentMappings.Add<EmployeeCompactMaps>())
.Mappings(m => m.FluentMappings.Add<AppUserMaps>())
.Mappings(m => m.FluentMappings.Add<SupportLevelMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerDepartmentMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerSalutationMaps>())
.Mappings(m => m.FluentMappings.Add<MandatorMaps>())
.Mappings(m => m.FluentMappings.Add<FederalStateMaps>())
.Mappings(m => m.FluentMappings.Add<AppUserGroupMaps>())
.Mappings(m => m.FluentMappings.Add<AppRightMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerCompactMaps>())
.Mappings(m => m.FluentMappings.Add<SupplierMaps>())
.Mappings(m => m.FluentMappings.Add<AccountAddressMaps>())
.Mappings(m => m.FluentMappings.Add<AccountCustomerMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AccountMaps>())
.Mappings(m => m.FluentMappings.Add<AccountTypeMaps>())
.Mappings(m => m.FluentMappings.Add<AccountTypeToAccountMaps>())
.Mappings(m => m.FluentMappings.Add<GeoInfoMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptOfferMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptOrderMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptOrderItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptInvoiceMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptInvoiceItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptContractMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptContractItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptCreditVoucherMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptCreditVoucherItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptProvisionSchemaMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptProvisionSchemaItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptProvisionItemEntityMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptOfferItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptDeliveryListMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptDeliveryListItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptPickupListMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptPickupListItemMaps>())
.Mappings(m => m.FluentMappings.Add<AccountAddressContactMaps>())
.Mappings(m => m.FluentMappings.Add<AppSettingMaps>())
.Mappings(m => m.FluentMappings.Add<ApplicationSettingMaps>())
.Mappings(m => m.FluentMappings.Add<AccountSearchItemAccMaps>());
ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
new SchemaExport(fluentConfiguration.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out);
return session;
}
}