feat(erp): Gutschrift-Rückschreibung per Config togglen
Neues Flag [erp] gutschrift_writeback_enabled (Default true): steuert, ob die Geld-Gutschrift (GUTSCHRIFT10-Belegzeile) beim Abschluss ins ERP zurückgeschrieben wird. Gutschriften sind bestandsneutral (keine Bestandsführung) → unkritisch, daher standardmäßig an, aber abschaltbar. Die Belegzeilen-Menge wird weiterhin generell NICHT zurückgeschrieben (Bestands-Inkonsistenz); geänderte Belege gehen in die Vier-Augen-Prüfung. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@ -60,11 +60,17 @@ fn erp_zahlbed_code(pg_code: &str) -> Option<&'static str> {
|
||||
|
||||
pub struct MssqlErpDeliveryWriteback {
|
||||
config: MssqlErpConfig,
|
||||
/// Gutschrift-Belegzeile (GUTSCHRIFT10) mit zurückschreiben? Per Config
|
||||
/// abschaltbar (bestandsneutral, daher unkritisch).
|
||||
gutschrift_enabled: bool,
|
||||
}
|
||||
|
||||
impl MssqlErpDeliveryWriteback {
|
||||
pub fn new(config: MssqlErpConfig) -> Self {
|
||||
Self { config }
|
||||
pub fn new(config: MssqlErpConfig, gutschrift_enabled: bool) -> Self {
|
||||
Self {
|
||||
config,
|
||||
gutschrift_enabled,
|
||||
}
|
||||
}
|
||||
|
||||
fn tiberius_config(&self) -> Config {
|
||||
@ -337,6 +343,7 @@ impl MssqlErpDeliveryWriteback {
|
||||
async fn run(
|
||||
client: &mut TiberiusClient,
|
||||
cmd: &ErpFinishDeliveryCommand,
|
||||
gutschrift_enabled: bool,
|
||||
) -> Result<(), ApplicationError> {
|
||||
let bk = Self::resolve_belegkopf(client, cmd.belegart_id, &cmd.belegnummer).await?;
|
||||
|
||||
@ -346,8 +353,11 @@ impl MssqlErpDeliveryWriteback {
|
||||
// Stattdessen bleibt der ERP-Beleg im Original; die Lieferung wird im
|
||||
// Backend zur Vier-Augen-Prüfung markiert (siehe ReviewRepository) und
|
||||
// die Fakturierung entscheidet manuell. Die Geld-Gutschrift wird
|
||||
// weiterhin geschrieben (unkritisch, nur Vier-Augen-Bestätigung).
|
||||
Self::upsert_gutschrift(client, bk, cmd.credit_amount_cents).await?;
|
||||
// (sofern per Config aktiviert) weiterhin geschrieben — bestandsneutral,
|
||||
// daher unkritisch, nur Vier-Augen-Bestätigung.
|
||||
if gutschrift_enabled {
|
||||
Self::upsert_gutschrift(client, bk, cmd.credit_amount_cents).await?;
|
||||
}
|
||||
|
||||
Self::recalc_head(client, bk).await?;
|
||||
|
||||
@ -381,7 +391,7 @@ impl ErpDeliveryWriteback for MssqlErpDeliveryWriteback {
|
||||
.await
|
||||
.map_err(repo)?;
|
||||
|
||||
match Self::run(&mut client, &cmd).await {
|
||||
match Self::run(&mut client, &cmd, self.gutschrift_enabled).await {
|
||||
Ok(()) => {
|
||||
client.simple_query("COMMIT").await.map_err(repo)?;
|
||||
tracing::info!(
|
||||
|
||||
Reference in New Issue
Block a user