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(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(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(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()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) ; ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory(); ISession session = sessionFactory.OpenSession(); new SchemaExport(fluentConfiguration.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out); return session; } }