Alloheim/Service/CustomSaveInterceptor - autom. Debitornr.

This commit is contained in:
2023-09-15 14:34:02 +02:00
parent 81b72c367c
commit 0949917515
3 changed files with 187 additions and 14 deletions

View File

@@ -74,6 +74,7 @@
<DependentUpon>ServiceInvoiceReport.cs</DependentUpon>
</Compile>
<Compile Include="Service\CustomAccountingService.cs" />
<Compile Include="Service\CustomSaveInterceptor.cs" />
<Compile Include="SettlementReport2.cs">
<SubType>Component</SubType>
</Compile>

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using BeWo.Data.Access;
using BeWo.Data.Entities;
@@ -19,12 +20,74 @@ namespace Alloheim.Export
DateTime dt = DateTime.Now;
DateTime.TryParse(query.Parameter[0].Value.ToString(), out dt);
query.FileName = String.Format("1192_{0:yyyyMMdd}_{0:hhmmss}_FIBU.TXT", DateTime.Now);
query.QueryResult = GetAbrechnungenString(dt);
if (query.Title == "SAP Export Stammdaten")
{
query.FileName = String.Format("1192_{0:yyyyMMdd}_{0:hhmmss}_DEBSB.TXT", DateTime.Now);
query.QueryResult = GetDebitorenString(dt);
}
else
{
query.FileName = String.Format("1192_{0:yyyyMMdd}_{0:hhmmss}_FIBU.TXT", DateTime.Now);
query.QueryResult = GetAbrechnungenString(dt);
}
return query;
}
public static String GetDebitorenString(DateTime date)
{
var dt = ExecuteQuery(GetDebitorenSql(date), date);
StringBuilder sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
if (sb.Length > 0)
{
sb.AppendLine();
}
for (int i = 0; i < row.ItemArray.Length; i++)
{
if (i > 0)
{
sb.Append("\t");
}
var item = row[i];
if (i == 15 && item != null)
{
var oid = (long)row[i];
var p = DAOFactory.GenericDAO.LoadByID<Person>(oid);
string telefon = null;
var contact = p.Contacts.FirstOrDefault(c => c.Type == ContactType.business_MobilePhone);
contact = p.Contacts.FirstOrDefault(c => c.Type == ContactType.business_Phone);
if (contact != null)
{
telefon = contact.Value;
}
sb.Append(telefon);
}
else if (i == 2 && item != null)
{
var sex = row[i].ToString();
if(sex == "0")
{
sb.Append("Herr");
}
else
{
sb.Append("Frau");
}
}
else
{
sb.Append(item);
}
}
}
return sb.ToString();
}
public static String GetAbrechnungenString(DateTime date)
{
StringBuilder sb = new StringBuilder();
@@ -57,6 +120,7 @@ namespace Alloheim.Export
var sql = GetMonatlicheBetraegeSql(date);
var dt = ExecuteQuery(sql, date);
int counter = 0;
StringBuilder sb = new StringBuilder();
foreach (DataRow row in dt.Rows)
{
@@ -75,13 +139,14 @@ namespace Alloheim.Export
*/
DateTime lastDate = new DateTime(date.Year, date.Month, 1);
lastDate = lastDate.AddMonths(1).AddDays(-1);
counter += 1;
sb.Append("1192\t"); // Buchungskreis 1192
sb.Append("DR\t"); // Beleg DR für Rechnung / DG für Gutschrift
sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate));
sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate));
sb.Append("EUR\t");
sb.Append(String.Format("1192{0:ddMMyyyy} \t", lastDate));// Profitcenter + Rechnungs - Nr.VN
sb.Append(String.Format("1192{0:ddMMyyyy}{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN
sb.Append("1192\t"); // Belegkopftext 1192
sb.Append("D\t"); // D = Debitorenposition / zweite Zeile: S = Sachkontenposition
sb.Append("01\t"); // Kontoart D: S=01 H=11 / zweite Zeile: Kontoart S: S=40 H=50
@@ -99,7 +164,7 @@ namespace Alloheim.Export
sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate));
sb.Append(String.Format("{0:ddMMyyyy} \t", lastDate));
sb.Append("EUR\t");
sb.Append(String.Format("1192{0:ddMMyyyy} \t", lastDate));// Profitcenter + Rechnungs - Nr.VN
sb.Append(String.Format("1192{0:ddMMyyyy}{1} \t", lastDate, counter));// Profitcenter + Rechnungs - Nr.VN
sb.Append("1192\t"); // Belegkopftext 1192
sb.Append("S\t"); // S = Sachkontenposition
sb.Append("50\t"); // Kontoart Kontoart S: S=40 H=50
@@ -221,25 +286,41 @@ ib.AccountingPeriodEnd
//string key = String.Format("{0}_{1}", row[2], row[1]); //Dictionary, damit erste Zeile nur einmal geschrieben wird
//if (!key2Value.ContainsKey(key))
//{
//key2Value.Add(key, key);
//key2Value.Add(key, key);
String betrag = String.Format("{0:0.00}", row[0]); // Betrag
if (betrag.Contains("-")) // Storno
{
betrag = betrag.Replace("-", "");
storno = true;
}
// Erste Linie - Rechnung
sb.Append("1192\t"); // Buchungskreis 1192
sb.Append("DR\t"); // Beleg DR für Rechnung / DG für Gutschrift
if (storno)
{
sb.Append("DG\t"); // DG für Gutschrift
}
else
{
sb.Append("DR\t"); // Beleg DR für Rechnung / DG für Gutschrift
}
sb.Append(String.Format("{0:ddMMyyyy}\t", row[3]));
sb.Append(String.Format("{0:ddMMyyyy}\t", row[3]));
sb.Append("EUR\t");
sb.Append(String.Format("{0}\t", row[1])); // Rechnungs - Nr.VN (Profitcenter ist in Rechnungsnr. enthalten)
sb.Append("1192\t"); // Belegkopftext 1192
sb.Append("D\t"); // D = Debitorenposition / zweite Zeile: S = Sachkontenposition
sb.Append("01\t"); // Kontoart D: S=01 H=11 / zweite Zeile: Kontoart S: S=40 H=50
sb.Append(String.Format("1192{0}\t", row[6])); //DebitorNumber Kostenträger / zweite Zeile: Sachkonto SAP
String betrag = String.Format("{0:0.00}", row[0]); // Betrag
if (betrag.Contains("-")) // Storno
if (storno)
{
storno = true;
sb.Append("11\t"); // Kontoart D: S=01 H=11 / zweite Zeile: Kontoart S: S=40 H=50
}
sb.Append(String.Format("{0:0.00}\t", row[0])); //Betrag
else
{
sb.Append("01\t"); // Kontoart D: S=01 H=11 / zweite Zeile: Kontoart S: S=40 H=50
}
sb.Append(String.Format("1192{0}\t", row[6])); //DebitorNumber Kostenträger / zweite Zeile: Sachkonto SAP
sb.Append(String.Format("{0:0.00}\t", betrag)); //Betrag
sb.Append("00\t"); // Umsatzsteuerschlüssel
if (storno)
{
@@ -279,7 +360,7 @@ ib.AccountingPeriodEnd
sb.Append("50\t"); // Kontoart Kontoart S: S=40 H=50
}
sb.Append("409600\t"); // zweite Zeile: Sachkonto SAP
sb.Append(String.Format("{0:0.00}\t", row[0])); //Betrag
sb.Append(String.Format("{0:0.00}\t", betrag)); //Betrag
sb.Append("00\t"); // Umsatzsteuerschlüssel
if (storno)
{
@@ -329,7 +410,52 @@ ORDER BY p.`LastName`, p.`FirstName`, cb2sc.`ApprovedStartDate`
return sql;
}
public static DataTable ExecuteQuery(String sql, DateTime dt)
private static String GetDebitorenSql(DateTime date)
{
String sql = @"
SELECT
distinct
CONCAT('1192', c.DebitorNumber),
null,
p.Sex,
CONCAT(p.`LastName`, ' ', p.`FirstName`),
CONCAT(p.`LastName`, ' ', p.`FirstName`),
null,
null,
null,
a.Street,
null,
a.Town,
a.PostalCode,
null,
null,
'D',
p.oid,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
'1192'
FROM `customer` c
INNER JOIN `person` p ON p.`Oid` = c.`PersonOid`
INNER JOIN supportconcept sc on sc.CustomerOID = c.Oid
INNER JOIN costbearer2supportconcept cb2sc on cb2sc.SupportConceptOID = sc.Oid
LEFT JOIN Address a on p.addressOid = a.oid
WHERE c.isactive=1 AND c.Insts >= ':Monat_Start' AND c.Insts < ':Monat_End'
order by p.`LastName`, p.FirstName
";
return sql;
}
public static DataTable ExecuteQuery(String sql, DateTime dt)
{
var newsql = sql;
newsql = newsql.Replace(":Abrechnungsmonat", String.Format("{0:dd.MM.yyyy}", dt));

View File

@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BeWo.Data.Access;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Services;
namespace Alloheim.Service
{
public class CustomSaveInterceptor : SaveInterceptor
{
public override string AllowSaveCustomer(CustomerDC c)
{
if (String.IsNullOrWhiteSpace(c.DebitorNumber))
{
int newNummer = 1;
var result = DAOFactory.SearchDAO.GetSqlResult("SELECT Max(CONVERT(DebitorNumber, UNSIGNED INTEGER)) FROM customer");
//
//update customer set debitornumber = '5' + debitornumber where debitornumber is not null
if (result.Count > 0)
{
var test = result[0];
int p = 0;
if (test != null && Int32.TryParse(test.ToString(), out p))
{
if (p < 150000)
{
p = 150000;
}
newNummer = p + 1;
}
}
c.DebitorNumber = newNummer.ToString();
}
return base.AllowSaveCustomer(c);
}
}
}