feat(report): Kundennummer an DOCUframe-Makro _SV_assignDeliveryReport uebergeben
Das Makro ordnet den Lieferbericht dem Vorgang des Kunden zu und braucht
dafuer jetzt zusaetzlich die im ERP hinterlegte Kundennummer:
{ objectId, belegnummer, kundennummer }
- AssignReportRequest + Gateway-Port um kundennummer (String) erweitert
- AttachmentRepository.delivery_customer_number(): liest
customers.erp_customer_id (= ERP Kunden.Kundennummer) ueber
deliveries.customer_id
- ProcessDeliveryReportUseCase liest die Nummer aus der DB (nicht aus dem
Render-Ergebnis), damit sie auch im Retry-Pfad ohne erneutes Rendern vorliegt
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -58,6 +58,15 @@ pub trait AttachmentRepository: Send + Sync {
|
||||
delivery_id: Uuid,
|
||||
) -> Result<Option<String>, ApplicationError>;
|
||||
|
||||
/// Liefert die ERP-Kundennummer (`customers.erp_customer_id`) des Kunden
|
||||
/// der Lieferung. Wird u. a. dem DOCUframe-Makro
|
||||
/// `_SV_assignDeliveryReport` als `kundennummer` mitgegeben. `None`, wenn
|
||||
/// die Lieferung nicht (mehr) existiert.
|
||||
async fn delivery_customer_number(
|
||||
&self,
|
||||
delivery_id: Uuid,
|
||||
) -> Result<Option<i64>, ApplicationError>;
|
||||
|
||||
/// Listet alle noch nicht gelöschten Attachments einer Lieferung
|
||||
/// (`deleted_at IS NULL`) mit ihrer lokalen Referenz — fürs Aufräumen.
|
||||
async fn list_active_for_delivery(
|
||||
|
||||
@ -22,12 +22,15 @@ pub trait DocuframeReportGateway: Send + Sync {
|
||||
pdf: Vec<u8>,
|
||||
) -> Result<String, ApplicationError>;
|
||||
|
||||
/// Ruft das Makro `_SV_assignDeliveryReport` mit `{objectId, belegnummer}`
|
||||
/// auf und ordnet den hochgeladenen Report dem Beleg zu. Fehler, wenn das
|
||||
/// Makro `succeeded != true` liefert oder DOCUframe nicht erreichbar ist.
|
||||
/// Ruft das Makro `_SV_assignDeliveryReport` mit
|
||||
/// `{objectId, belegnummer, kundennummer}` auf und ordnet den hochgeladenen
|
||||
/// Report dem Beleg bzw. dem Vorgang des Kunden zu. `kundennummer` ist die
|
||||
/// im ERP hinterlegte Kundennummer (als String). Fehler, wenn das Makro
|
||||
/// `succeeded != true` liefert oder DOCUframe nicht erreichbar ist.
|
||||
async fn assign_report(
|
||||
&self,
|
||||
object_id: &str,
|
||||
belegnummer: &str,
|
||||
kundennummer: &str,
|
||||
) -> Result<(), ApplicationError>;
|
||||
}
|
||||
|
||||
@ -92,8 +92,20 @@ impl ProcessDeliveryReportUseCase {
|
||||
}
|
||||
};
|
||||
|
||||
// Schritt 3: Makro-Zuordnung (muss succeeded == true liefern).
|
||||
self.gateway.assign_report(&object_id, &belegnummer).await?;
|
||||
// Schritt 3: Makro-Zuordnung (muss succeeded == true liefern). Das
|
||||
// Makro braucht zusätzlich die ERP-Kundennummer, um den Report dem
|
||||
// Vorgang des Kunden zuzuordnen. Bewusst aus der DB gelesen (nicht aus
|
||||
// dem Render-Ergebnis), damit sie auch im Retry-Pfad vorliegt, in dem
|
||||
// das Rendern übersprungen wird.
|
||||
let kundennummer = self
|
||||
.attachment_repo
|
||||
.delivery_customer_number(delivery_id)
|
||||
.await?
|
||||
.ok_or(ApplicationError::NotFound)?
|
||||
.to_string();
|
||||
self.gateway
|
||||
.assign_report(&object_id, &belegnummer, &kundennummer)
|
||||
.await?;
|
||||
|
||||
// Schritt 4: erst aufräumen, dann als erledigt markieren.
|
||||
self.cleanup_local(delivery_id, &belegnummer).await;
|
||||
|
||||
Reference in New Issue
Block a user