InvoiceBase.StoredFile

+ Localhost download XRechnung durch Beispiel PDF ersetzt
This commit is contained in:
2025-06-23 15:00:36 +02:00
parent e39fb7b102
commit fb3303163d
9 changed files with 51 additions and 16 deletions

View File

@@ -917,14 +917,14 @@ namespace BeWo.ViewModel
get; set;
}
public long? Oid => DataContract.InvoiceBaseOid;
public string SenderStreet => DataContract.SenderStreet;
public string SenderTown => DataContract.SenderTown;
public string SenderPostCode => DataContract.SenderPostCode;
public StoredFileDC XRechnungStoredFile => DataContract.XRechnungStoredFile;
public IList<IInvoiceItem> IInvoiceItems => throw new NotImplementedException();
public long? Oid => DataContract.InvoiceBaseOid;
protected override void InitByDataContract(InvoiceBaseDC pDataContract)
{
_SupportConceptOid = pDataContract.SupportConceptOid;

View File

@@ -831,5 +831,7 @@ namespace BeWo.Data.Entities
public virtual string SenderTown => SenderAddress?.Town;
public virtual string SenderPostCode => SenderAddress?.PostalCode;
public virtual IList<IInvoiceItem> IInvoiceItems => InvoiceItems.Select(x => x as IInvoiceItem).ToList();
public virtual StoredFile XRechnungStoredFile { get; set; }
}
}

View File

@@ -50,6 +50,7 @@
<many-to-one name="SenderAddress" column="SenderAddressOid" class="BeWo.Data.Entities.Address, BeWo.Data" cascade="all" />
<many-to-one name="RecipientAddress" column="RecipientAddressOid" class="BeWo.Data.Entities.Address, BeWo.Data" cascade="all" />
<many-to-one name="CostBearer2SupportConcept" column="CostBearer2SupportConceptOid" class="BeWo.Data.Entities.CostBearer2SupportConcept, BeWo.Data" cascade="none" />
<many-to-one name="XRechnungStoredFile" column="XRechnungStoredFileOid" class="BeWo.Data.Entities.StoredFile, BeWo.Data" cascade="all-delete-orphan" />
<bag name="InvoiceItems" table="InvoiceItem" generic="true" cascade="all-delete-orphan" batch-size="250">
<key column="InvoiceBaseOid" />
<one-to-many class="BeWo.Data.Entities.InvoiceItem,BeWo.Data" />

View File

@@ -388,9 +388,9 @@
<add key="OpenWebUIUrl" value="https://owui1.ownsoft.de/"/>
<add key="XRechnungApiUrl" value="https://test2.evplaner.de/xrg/"/>
<add key="StoredFilesFolderPath" value="C:\StoredFiles"/>
<add key="StoredTenantFilesFolderPath" value="C:\StoredTenantFiles"/>
<add key="HelloWorldPdfLocation" value="C:\StoredFiles\HelloWorld.pdf"/>
<add key="StoredFilesFolderPath" value="C:\BeWoPlaner\StoredFiles"/>
<add key="StoredTenantFilesFolderPath" value="C:\BeWoPlaner\StoredTenantFiles"/>
<add key="HelloWorldPdfLocation" value="C:\BeWoPlaner\StoredFiles\HelloWorld.pdf"/>
<add key="ServiceLogFilePath" value="C:\BeWoPlaner\logs\server\service.log.txt"/>
<add key="WCFErrorLogFilePath" value="C:\BeWoPlaner\logs\server\wcferror.log.txt"/>

View File

@@ -0,0 +1,10 @@
ALTER TABLE `invoicebase`
ADD COLUMN `XRechnungStoredFileOid` BIGINT NULL DEFAULT NULL AFTER `StornoInvoiceBaseOid`,
ADD INDEX `FK_IN_SFILE_idx` (`XRechnungStoredFileOid` ASC) VISIBLE;
;
ALTER TABLE `invoicebase`
ADD CONSTRAINT `FK_IN_SFILE`
FOREIGN KEY (`XRechnungStoredFileOid`)
REFERENCES `storedfile` (`Oid`)
ON DELETE CASCADE
ON UPDATE CASCADE;

View File

@@ -152,7 +152,9 @@ namespace BeWo.Service.DCEntityMapper
pDataContract.IsGkvValid = error is null;
}
return pDataContract;
pDataContract.XRechnungStoredFile = MapperFactory.StoredFile.CreateOrMapToNewDC(pEntity.XRechnungStoredFile, true);
return pDataContract;
}
public override InvoiceBase MergeWithEntity(InvoiceBaseDC pDataContract, InvoiceBase pEntity)

View File

@@ -811,5 +811,6 @@ namespace BeWo.Service.DCEntityMapper
public static GkvAbrechnungLightDC_GkvAbrechnungLight GkvAbrechnungLight { get; } = new GkvAbrechnungLightDC_GkvAbrechnungLight();
public static GkvTransferProtokollLightDC_GkvTransferprotokollLight GkvTransferprotokollLight { get; } = new GkvTransferProtokollLightDC_GkvTransferprotokollLight();
public static OrganisationLightDC_OrganisationLight OrganisationLight { get; } = new OrganisationLightDC_OrganisationLight();
public static StoredFileDC_StoredFile StoredFile { get; } = new StoredFileDC_StoredFile();
}
}

View File

@@ -1,4 +1,5 @@
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Core;
using BeWo.Service.ServiceImplementations;
using BeWo.Service.ServiceProxy;
@@ -26,27 +27,42 @@ namespace BeWo.Service.Plugins
var lStoragePath = MergedConfig.GetSetting(WebConfigSetting.StoredTenantFilesFolderPath);
var lStorage = DAOFactory.GetLocalTenantFileStorage(lStoragePath);
var lFileName = lStorage.GetXRechnungFileName(invoice_base_oid);
var invoice_base = DAOFactory.GenericDAO.LoadByID<InvoiceBase>(invoice_base_oid);
// Falls Lokal vorhanden, gebe lokale Version zurück
if(tryGetXRechnungLocal(lStorage, lFileName, out var bytes))
if(invoice_base.XRechnungStoredFile?.FileName is string lFileName && tryGetXRechnungLocal(lStorage, lFileName, out var bytes))
return ApiResponse<byte[]>.SuccessResponse(bytes);
// Lokal nicht vorhanden, berechne XRechnung
var str = ServiceConfigReader.GetInvoiceTestJsonString();
// Erstelle Url ohne weitere Authentifizierung
var download_url = report_url + "&mode=pdf";
var token_url = new DownloadServiceImp().CreateTemporaryUrl(download_url, false);
var token_url = GetTokenUrl(report_url);
return requestXRechnung(lStorage, lFileName, invoice_base_oid, str, token_url);
return requestXRechnung(lStorage, invoice_base, str, token_url);
}
private ApiResponse<byte[]> requestXRechnung(LocalTenantFileStorageDAO pStorage, string pFileName, long invoice_base_oid, object obj, string token_url)
private string GetTokenUrl(string report_url)
{
string download_url;
if (report_url.IndexOf("localhost") < 0)
download_url = report_url + "&mode=pdf";
else
download_url = "https://app5.bewoplaner.de/service/ApiStreamService.svc/GetPdf";
var token_url = new DownloadServiceImp().CreateTemporaryUrl(download_url, false);
return token_url;
}
private ApiResponse<byte[]> requestXRechnung(LocalTenantFileStorageDAO pStorage, InvoiceBase invoice_base, object obj, string token_url)
{
// Request
var response = ServiceFacade.XRechnung.Create(obj, token_url);
var lFileName = pStorage.GetXRechnungFileName(invoice_base.Oid.Value);
if (response.Success)
{
try
@@ -54,9 +70,11 @@ namespace BeWo.Service.Plugins
var bytes = response.Data;
using (MemoryStream ms = new MemoryStream(bytes))
{
var file = pStorage.SaveHybridFile(BWPFeature.XRechnung, pFileName, "application/pdf", ms, TableID.InvoiceBase, invoice_base_oid);
//var msg = $"Tenant: {lStorage.Tenant}, FilePath: {file.FilePath}";
//ServiceHelper.CoreLogger.Log(LogLevel.Info, msg, $"{nameof(LocalFileStorageDAO)}.{nameof(lStorage.SaveHybridFile)}");
var file = pStorage.SaveHybridFile(BWPFeature.XRechnung, lFileName, "application/pdf", ms, TableID.InvoiceBase, invoice_base.Oid.Value);
invoice_base.XRechnungStoredFile = file;
DAOFactory.GenericDAO.Update(invoice_base);
}
}
catch (Exception ex)

View File

@@ -75,6 +75,7 @@ namespace BS.Shared.DataContracts
[DataMember] public InvoiceType Type { get; set; }
[DataMember] public long? StornoInvoiceBaseOid { get; set; }
[DataMember] public String BackgroundColor { get; set; }
[DataMember] public StoredFileDC XRechnungStoredFile { get; set; }
[DataMember]
public List<ContactDC> RecipientContactInformations