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:
@ -92,9 +92,15 @@ pub struct CommitData {
|
||||
// ─── Makro-Aufruf (`/v1/execute/<name>`) ────────────────────────────────────
|
||||
|
||||
/// Request-Body für das Makro `_SV_assignDeliveryReport`.
|
||||
///
|
||||
/// Beispiel: `{ "objectId": "1EBGJM", "belegnummer": "V-30690285",
|
||||
/// "kundennummer": "123456" }`.
|
||||
#[derive(Debug, Serialize)]
|
||||
pub struct AssignReportRequest<'a> {
|
||||
#[serde(rename = "objectId")]
|
||||
pub object_id: &'a str,
|
||||
pub belegnummer: &'a str,
|
||||
/// Im ERP hinterlegte Kundennummer des Kunden (String, wie vom Makro
|
||||
/// erwartet) — damit DOCUframe den Report dem Vorgang des Kunden zuordnet.
|
||||
pub kundennummer: &'a str,
|
||||
}
|
||||
|
||||
@ -497,10 +497,12 @@ impl DocuframeReportGateway for GsdService {
|
||||
&self,
|
||||
object_id: &str,
|
||||
belegnummer: &str,
|
||||
kundennummer: &str,
|
||||
) -> Result<(), ApplicationError> {
|
||||
let body = serde_json::to_value(super::dto::AssignReportRequest {
|
||||
object_id,
|
||||
belegnummer,
|
||||
kundennummer,
|
||||
})
|
||||
.map_err(Self::ext)?;
|
||||
let val = self
|
||||
|
||||
@ -78,6 +78,23 @@ impl AttachmentRepository for PgAttachmentRepository {
|
||||
Ok(belegnummer)
|
||||
}
|
||||
|
||||
async fn delivery_customer_number(
|
||||
&self,
|
||||
delivery_id: Uuid,
|
||||
) -> Result<Option<i64>, ApplicationError> {
|
||||
let customer_number: Option<i64> = sqlx::query_scalar(
|
||||
"SELECT c.erp_customer_id \
|
||||
FROM deliveries d \
|
||||
JOIN customers c ON c.id = d.customer_id \
|
||||
WHERE d.id = $1",
|
||||
)
|
||||
.bind(delivery_id)
|
||||
.fetch_optional(&self.pool)
|
||||
.await
|
||||
.map_err(db)?;
|
||||
Ok(customer_number)
|
||||
}
|
||||
|
||||
async fn list_active_for_delivery(
|
||||
&self,
|
||||
delivery_id: Uuid,
|
||||
|
||||
Reference in New Issue
Block a user