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,40 @@
using Centron.Data.Entities.Accounts;
using FluentNHibernate.Mapping;
namespace Centron.Tests.BL.DatabaseMappings
{
/// <summary>
/// <b>IMPORTANT</b>: This is a replacement class for the real <see cref="Centron.DAO.Mappings.Accounts.AccountSearchItemAccMaps"/> class for running in-memory unit tests.
/// The real mapping maps to a database view (cvw_AccountSearchAcc) which cannot be created in an in-memory SQLite database.
/// This test mapping creates a simple table with only the columns needed for the tests.
/// Make sure to keep this class in sync with the columns needed for your tests.
/// </summary>
public class AccountSearchItemAccMapsForTest : ClassMap<AccountSearchItemAcc>
{
public AccountSearchItemAccMapsForTest()
{
// Mark as read-only like the production mapping
ReadOnly();
// Use a simple table name instead of the view name
Table("AccountSearchItemAccTest");
// Map RowNumber as the ID (same as production mapping)
// Using Assigned generator since we won't be inserting via NHibernate
Id(m => m.RowNumber).Column("RowNumber").GeneratedBy.Assigned();
// Map AccountI3D as I3D (this is how it's queried in SetAccountReferenceProperties)
// This is the key property that the business logic queries by
Map(m => m.I3D).Column("AccountI3D");
// Map the columns used in SetAccountReferenceProperties
Map(m => m.CustomerNumber).Column("CustomerNumber").Nullable();
Map(m => m.SupplierNumber).Column("SupplierNumber").Nullable();
// Additional commonly used columns - add more as needed for tests
Map(m => m.AccountNumber).Column("AccountNumber").Nullable();
Map(m => m.AccountName).Column("AccountName").Nullable();
Map(m => m.IsActive).Column("IsActive").Nullable();
}
}
}
@@ -0,0 +1,28 @@
using Centron.Data.Entities.Accounts;
using FluentNHibernate.Mapping;
namespace Centron.Tests.BL.DatabaseMappings
{
/// <summary>
/// <b>IMPORTANT</b>: This is a replacement class for the real <see cref="Centron.DAO.Mappings.Accounts.AccountSupplierMaps"/> class for running in-memory unit tests.
/// This test mapping includes only the columns needed for the tests.
/// Make sure to keep this class in sync with the columns needed for your tests.
/// </summary>
public class AccountSupplierMapsForTest : ClassMap<AccountSupplier>
{
public AccountSupplierMapsForTest()
{
Table("AccountSuppliers");
Id(m => m.I3D).Column("I3D").GeneratedBy.Assigned();
Map(m => m.Number).Column("Number");
// Basic columns that might be needed for tests
Map(m => m.BookKeepingNumber).Column("BookKeepingNumber").Length(64).Nullable();
Map(m => m.OwnCustomerNumber).Column("OwnCustomerNumber").Length(20).Nullable();
// Note: Other columns and reference mappings are intentionally omitted
// for test purposes to keep the mapping simple
}
}
}
@@ -0,0 +1,27 @@
using Centron.Data.Entities.Accounts;
using FluentNHibernate.Mapping;
namespace Centron.Tests.BL.DatabaseMappings
{
/// <summary>
/// <b>IMPORTANT</b>: This is a replacement class for the real <see cref="Centron.DAO.Mappings.Accounts.AccountTypeToAccountMaps"/> class for running in-memory unit tests.
/// This test mapping includes only the columns needed for the tests, without the reference mappings that would cause issues.
/// Make sure to keep this class in sync with the columns needed for your tests.
/// </summary>
public class AccountTypeToAccountMapsForTest : ClassMap<AccountTypeToAccount>
{
public AccountTypeToAccountMapsForTest()
{
Table("AccountTypeToAccounts");
Id(m => m.I3D).Column("I3D").GeneratedBy.Assigned();
Map(m => m.AccountTypeI3D).Column("AccountTypeI3D");
Map(m => m.AccountI3D).Column("AccountI3D");
Map(m => m.AccountCustomerI3D).Column("AccountCustomerI3D").Nullable();
Map(m => m.AccountSupplierI3D).Column("AccountSupplierI3D").Nullable();
// Note: Reference mappings (AccountType, CustomerData, SupplierData) are intentionally
// omitted for test purposes to avoid dependency on additional entity mappings
}
}
}
@@ -0,0 +1,246 @@
using Centron.DAO.Mappings.CustomerArea;
using Centron.DAO.UserTypes;
using Centron.Data.Entities.CustomerArea;
using Centron.Data.Entities.ObjectTypes;
using Centron.Interfaces.CustomerArea;
using Centron.Interfaces.Sales.CustomerAssets;
namespace Centron.Tests.BL.DatabaseMappings
{
/// <summary>
/// <b>IMPORTANT</b>: This is a replacement class for the real <see cref="CustomerMaps"/> class for running in-memory unit tests.
/// Make sure to keep this class in sync with the real class.
/// </summary>
public class CustomerMapsForTest : CustomerOptimizedMaps<Customer>
{
public CustomerMapsForTest()
{
Id(k => k.I3D).Column("I3D").GeneratedBy.Assigned();
Map(k => k.PaymentConditionOfferI3D).Column("ZahlKondAng").Nullable();
Map(k => k.PaymentConditionOrderI3D).Column("ZahlKondAuf").Nullable();
Map(k => k.PaymentConditionServiceOrderI3D).Column("ZahlKondSer").Nullable();
Map(k => k.PaymentConditionPickupListI3D).Column("ZahlkondAbhol").Nullable();
Map(k => k.PaymentConditionInvoiceI3D).Column("ZahlKondRech").Nullable();
Map(k => k.PaymentConditionCreditVoucherI3D).Column("ZahlKondGut").Nullable();
Map(k => k.DeliveryConditionI3D).Column("ZahlKondLiefBed").Nullable();
// IMPORTANT: This is the problematic column that causes a syntax error in the SQLite in-memory database.
// The original name of the column is 'Limit' which is a reserved keyword in SQLite.
// This is changed here for 'CreditLimit' to avoid the syntax error.
Map(k => k.CreditLimit).Column("CreditLimit");
Map(k => k.CreditLimitAvailable).Column("LimitVerfuegbar");
Map(k => k.CreditLimitCalculationKind).Column("LimitBerechnungsArt").Nullable();
Map(k => k.PurchaseOrderNumberRequiered).Column("BestNrNoetig");
References(k => k.RootDir).Column("RootDirI3D").LazyLoad();
References(k => k.PurchaseOrderDir).Column("BestDirI3D").LazyLoad();
References(k => k.ServiceDir).Column("SerDirI3D").LazyLoad();
References(k => k.DeliveryListDir).Column("LiefDirI3D").LazyLoad();
References(k => k.HelpdeskDir).Column("HlpDirI3D").LazyLoad();
References(k => k.DeviceDir).Column("GerDirI3D").LazyLoad();
References(k => k.OrderDir).Column("AufDirI3D").LazyLoad();
References(k => k.InvoiceDir).Column("RechDirI3D").LazyLoad();
References(k => k.ProjectDir).Column("ProjDirI3D").LazyLoad();
References(k => k.ActivityDir).Column("TaetDirI3D").LazyLoad();
References(k => k.ContractDir).Column("VertragDirI3D").LazyLoad();
References(k => k.OfferDir).Column("AngDirI3D").LazyLoad();
References(k => k.MailDir).Column("MailDirI3D").LazyLoad();
References(k => k.CreditVoucherDir).Column("GutDirI3D").LazyLoad();
References(k => k.PickupListDir).Column("AbholDirI3D").LazyLoad();
Map(k => k.AkqQuantityServer).Column("AkqAnzahlServer");
Map(k => k.AkqQuantityPC).Column("AkqAnzahlPC");
Map(k => k.AkqManufacturerServer).Column("AkqHerstellerServer").Length(80);
Map(k => k.AkqManufacturerPC).Column("AkqHerstellerPC").Length(80);
Map(k => k.AkqBuysFrom).Column("AkqKauftBei").Length(80);
Map(k => k.AkqManufacturerPrinter).Column("AkqHerstellerDrucker").Length(80);
Map(k => k.AkqResubmission).Column("AkqWiedervorlage");
Map(k => k.AkqAkquiseComplete).Column("AkqAkquiseKomplett");
Map(k => k.AkqAdditionalInformation).Column("AkqZusatzinfo").Length(int.MaxValue);
Map(k => k.DefaultAddressI3D).Column("DefaultAnschrift").Nullable();
Map(k => k.PriceList).Column("Preisliste");
Map(k => k.Bonus).Column("Bonus");
Map(k => k.AkqVIP).Column("AkqVIP");
Map(k => k.AdvertsingBan).Column("werbesperre");
References(k => k.DunningContactPerson).Column("MahnPersonI3D").LazyLoad();
Map(k => k.DunningKind).Column("MahnArt").Length(50);
Map(k => k.AlternativeCustomerI3D).Column("AbwKundeI3D");
Map(k => k.AlternativeAddressI3D).Column("AbwAnschriftI3D");
Map(k => k.Comment).Column("Kommentar").Length(int.MaxValue);
Map(k => k.WebPassword).Column("WebKennwort").Length(50);
Map(k => k.LastWebLogin).Column("LastWebLogin").Nullable();
Map(k => k.ClassificationI3D).Column("KlassifizierungI3D");
Map(k => k.ExternalI3D).Column("ExterneI3D").Length(50);
Map(k => k.ToDoAkquiseI3D).Column("ToDoAkquiseI3D");
Map(k => k.VATNotActive).Column("MWStAktiv");
References(k => k.BankCountry).Column("BankLand").LazyLoad();
Map(k => k.BankCity).Column("BankOrt").Length(50);
Map(k => k.BankStreet).Column("BankStrasse").Length(50);
Map(k => k.BankIBAN).Column("BankIBAN").Length(50);
Map(k => k.BankSWIFT).Column("BankSWIFT").Length(50);
Map(k => k.Bank02).Column("Bank02").Length(40);
Map(k => k.BankCode02).Column("BankBLZ02").Length(20);
Map(k => k.BankAccountNumber02).Column("BankKtoNr02").Length(20);
References(k => k.BankCountry02).Column("BankLand02").LazyLoad();
Map(k => k.BankCity02).Column("BankOrt02").Length(50);
Map(k => k.BankStreet02).Column("BankStrasse02").Length(50);
Map(k => k.BankIBAN02).Column("BankIBAN02").Length(50);
Map(k => k.BankSWIFT02).Column("BankSWIFT02").Length(50);
Map(k => k.OfferReportI3D).Column("AngRepI3D");
Map(k => k.OfferReportQuantity).Column("AngRepAnz");
Map(k => k.OrderReportI3D).Column("AufRepI3D");
Map(k => k.OrderReportQuantity).Column("AufRepAnz");
Map(k => k.ServiceReportI3D).Column("SerRepI3D");
Map(k => k.ServiceReportQuantity).Column("SerRepAnz");
Map(k => k.DeliveryListReportI3D).Column("LiefRepI3D");
Map(k => k.DeliveryListReportQuantity).Column("LiefRepAnz");
Map(k => k.PickupListReportI3D).Column("AbhRepI3D");
Map(k => k.PickupListReportQuantity).Column("AbhRepAnz");
Map(k => k.InvoiceReportI3D).Column("RechRepI3D");
Map(k => k.InvoiceReportQuantity).Column("RechRepAnz");
Map(k => k.CreditVoucherReportI3D).Column("GutRepI3D");
Map(k => k.CreditVoucherReportQuantity).Column("GutRepAnz");
Map(k => k.InfoOffer).Column("NeuInfoAngebot").Length(int.MaxValue);
Map(k => k.InfoOrder).Column("NeuInfoAuftrag").Length(int.MaxValue);
Map(k => k.InfoDeliveryList).Column("NeuInfoLieferschein").Length(int.MaxValue);
Map(k => k.InfoPickupList).Column("NeuInfoAbholschein").Length(int.MaxValue);
Map(k => k.InfoInvoice).Column("NeuInfoRechnung").Length(int.MaxValue);
Map(k => k.SalesRegionI3D).Column("VertriebsgebietI3D");
Map(k => k.DeliveryListDuplicateReportI3D).Column("LiefDublRepI3D");
Map(k => k.DeliveryListDuplicateReportQuantity).Column("LiefDublRepAnz");
Map(k => k.InvoiceDuplicateReportI3D).Column("RechDublRepI3D");
Map(k => k.InvoiceDuplicateReportQuantity).Column("RechDublRepAnz");
Map(k => k.DunningAfterDays).Column("MahnungNachTagen");
Map(k => k.SecoundDunningAfterDays).Column("MahnungNachTagen2");
Map(k => k.ThirdDunningAfterDays).Column("MahnungNachTagen3");
Map(k => k.TransferedToAccounting).Column("RWUebergabe");
References(k => k.TransferedToAccountringBy).Column("RWPersonalI3D").Nullable().LazyLoad();
Map(k => k.TransferedToAccountingDate).Column("RWDatum");
Map(k => k.CustomerOriginI3D).Column("KundenHerkunftI3D");
Map(k => k.OfferReportFaxI3D).Column("AngRepI3DFax");
Map(k => k.OfferReportMailI3D).Column("AngRepI3DMail");
Map(k => k.OfferReportPrintI3D).Column("AngRepI3DDruck");
Map(k => k.OrderReportFaxI3D).Column("AufRepI3DFax");
Map(k => k.OrderReportMailI3D).Column("AufRepI3DMail");
Map(k => k.OrderReportPrintI3D).Column("AufRepI3DDruck");
Map(k => k.ServiceReportFaxI3D).Column("SerRepI3DFax");
Map(k => k.ServiceReportMailI3D).Column("SerRepI3DMail");
Map(k => k.ServiceReportPrintI3D).Column("SerRepI3DDruck");
Map(k => k.DeliveryListReportFaxI3D).Column("LiefRepI3DFax");
Map(k => k.DeliveryListMailI3D).Column("LiefRepI3DMail");
Map(k => k.DeliveryListPrintI3D).Column("LiefRepI3DDruck");
Map(k => k.PickupListReportFaxI3D).Column("AbhRepI3DFax");
Map(k => k.PickupListReportMailI3D).Column("AbhRepI3DMail");
Map(k => k.PickupListReportPrintI3D).Column("AbhRepI3DDruck");
Map(k => k.InvoiceReportFaxI3D).Column("RechRepI3DFax");
Map(k => k.InvoiceReportMailI3D).Column("RechRepI3DMail");
Map(k => k.InvoiceReportPrintI3D).Column("RechRepI3DDruck");
Map(k => k.CreditVoucherReportFaxI3D).Column("GutRepI3DFax");
Map(k => k.CreditVoucherReportMailI3D).Column("GutRepI3DMail");
Map(k => k.CreditVoucherReportPrintI3D).Column("GutRepI3DDruck");
Map(k => k.Matchcode).Column("Kurzbezeichnung").Length(30);
Map(k => k.SpecialAgreementI3D).Column("SondervereinbarungI3D");
Map(k => k.AlternateContactPersonI3D).Column("AbwPersonI3D");
Map(k => k.AlternateReceiver).Column("AbwEmpfaenger").Length(500);
Map(k => k.AlternateDeliveryAddressI3D).Column("AbwLiefAnschriftI3D");
Map(k => k.AlternateDeliveryReceiver).Column("AbwLiefEmpfaenger").Length(500);
Map(k => k.AlternateDeliveryCustomerI3D).Column("AbwLiefKundeI3D");
Map(k => k.AlternateDeliveryContactPersonI3D).Column("AbwLiefPersonI3D");
Map(k => k.ProjNrNeeded).Column("ProjNrNoetig");
Map(k => k.AkqQuantityFree).Column("AkqAnzahlFrei");
Map(k => k.OrderLockAfterDunning).Column("AuftragsperreNachMahnung");
Map(k => k.AkqFreeText1).Column("AkqFreiText1").Length(30);
Map(k => k.AkqFreeText2).Column("AkqFreiText2").Length(30);
Map(k => k.AkqFreeText3).Column("AkqFreiText3").Length(30);
Map(k => k.AkqFreeText4).Column("AkqFreiText4").Length(30);
Map(k => k.InfoHelpdesk).Column("NeuInfoHelpdesk").Length(int.MaxValue);
Map(k => k.CustomerNumber).Column("KundenNummer");
Map(k => k.CustomerNumberExt).Column("KundenNummerExt");
Map(k => k.EvaluationOfSupplier).Column("Lieferantenbewertung");
Map(k => k.ISOCertified).Column("ISOzertifiziert");
Map(k => k.CreatedThrough).Column("ErstelltDurch");
Map(k => k.InfoCreditVoucher).Column("NeuInfoGutschrift").Length(int.MaxValue);
Map(k => k.DunningAtAlternateInvoiceAddress).Column("MahnungAnAbwRechAnschrift");
Map(k => k.DontShowRabateText).Column("RabatttextNichtAnzeigen");
Map(k => k.ProductionConfigurationRequiring).Column("FertigungskonfigurationsPflicht");
Map(k => k.PrintProductionConfiguration).Column("FertigungskonfigurationDrucken");
Map(k => k.Stock).Column("LagerI3D").CustomType<DefaultWarehouseI3DCustomType>().Nullable();
Map(k => k.InstructionActive).Column("UnterweisungAktiv");
Map(k => k.ContactI3D).Column("KontakteI3D");
Map(k => k.AkqResubmissionConfiguration).Column("AkqWiedervorlageEinstellung");
Map(k => k.AkqResubmissionKind).Column("AkqWiedervorlageArt");
Map(k => k.AkqResubmissionLength).Column("AkqWiedervorlageDauer");
Map(k => k.DistributorI3D).Column("DistributorI3D");
Map(k => k.FreeText01).Column("Freitext01").Length(255);
Map(k => k.GoodsRecipient).Column("Warenempfaengernummer").Length(50);
Map(k => k.NoCargoArticle).Column("KeinFrachtartikel");
Map(k => k.Kontoinhaber).Column("Kontoinhaber").Length(255);
HasMany(a => a.BusinessLines)
.KeyColumn("KundenI3D")
.Where(a => a.AccountKind == 0)
.LazyLoad();
HasMany(a => a.Interests)
.KeyColumn("KundenI3D")
.Where(a => a.AccountKind == 0)
.LazyLoad();
HasMany(a => a.Products)
.KeyColumn("KundenI3D")
.Where(a => a.AccountKind == 0)
.LazyLoad();
HasMany(a => a.CustomerArticles)
.KeyColumn("KundenI3D")
.LazyLoad();
HasMany(a => a.SpecialPrices)
.KeyColumn("KundenI3D")
.LazyLoad();
HasMany(a => a.Activitys)
.KeyColumn("KundeI3D")
.Where("ObjektArt = " + ((int)ObjectType.ObjectTypeDictionary.Customer).ToString())
.LazyLoad();
Map(f => f.InvoiceSendType)
.Column("RechnungVersandArt")
.Nullable()
.CustomType<AssetSendType>();
References(f => f.AlternateInvoiceReceiver)
.Column("AbwMailRechnungEmpfaengerI3D")
.Nullable()
.NotFound.Ignore()
.Cascade.None();
Map(f => f.BillingInterval)
.Column("BillingInterval")
.Nullable()
.CustomType<BillingInterval>();
Map(f => f.IsCustomerKind1)
.Column("Firmenkunde")
.Nullable();
Map(f => f.IsCustomerKind2)
.Column("Endkunde")
.Nullable();
Map(f => f.IsCustomerKind3)
.Column("Haendler")
.Nullable();
Map(f => f.IsCustomerKind4)
.Column("Interessent")
.Nullable();
Map(f => f.IsCustomerKind5)
.Column("KundenArt5")
.Nullable();
Map(m => m.RiverbirdMsp)
.Column("RiverbirdMsp")
.Length(32)
.Nullable();
this.Map(f => f.HelpdeskClosingDontNotifyCustomer).Column("HelpdeskClosingDontNotifyCustomer").Nullable();
}
}
}