Preview:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using CustomMethodLibrary;

using group24.PT.Objects.IN;

using PX.Common;
using PX.Data;
using PX.Data.BQL;
using PX.Data.BQL.Fluent;
using PX.Objects;
using PX.Objects.CM;
using PX.Objects.Common.Extensions;
using PX.Objects.CS;
using PX.Objects.GL;
using PX.Objects.IN;


namespace PX.Objects.IN
{
  public class GRR_INReceiptEntry : PXGraphExtension<PX.Objects.IN.INReceiptEntry>
  {
    public PXAction<INRegister> usrNullifyReceipt;
    [PXButton]
    [PXUIField(DisplayName = "Wareneingang annullieren")]
    protected void UsrNullifyReceipt()
    {
      INRegister register = Base.receipt.Current;

      if (register == null)
        return;

      PXLongOperation.StartOperation(Base, () =>
      {
        INReceiptEntry longGraph = PXGraph.CreateInstance<INReceiptEntry>();
        PXCache longCache = longGraph.receipt.Cache;
        TraceMessageCollector tmsg = new TraceMessageCollector();
        
        try
        {
          tmsg.AddMsg(false, $"Start GRR_INReceiptEntry.UsrNullifyReceipt");
        
          INRegister adjustment = methods.CreateStockAdjustment(longGraph, longCache, register, tmsg);
        
          if (adjustment == null)
          {
            tmsg.AddMsg(true, "Adjustment creation returned null. Exiting operation.");
            return;
          }
        
          tmsg.AddMsg(false, $"Stock adjustment created with RefNbr: {adjustment.RefNbr}");

          var registerExt_GRR = register.GetExtension<INRegisterExt_GRR>();
          var registerExt_GRA = register.GetExtension<INRegisterExt_GRA>();
          registerExt_GRR.UsrINRegisterAdjustmentNbr = adjustment.RefNbr;
          longCache.SetValueExt<INRegisterExt_GRR.usrINRegisterAdjustmentNbr>(register, adjustment.RefNbr);
        
          longCache.Update(register);
          tmsg.AddMsg(false, "Updated INRegister extension with adjustment number.");

          var adjustmentExt_GRR = adjustment.GetExtension<INRegisterExt_GRR>();
          var adjustmentExt_GRA = adjustment.GetExtension<INRegisterExt_GRA>();
          adjustmentExt_GRR.UsrINRegisterOriginAdjustment = register.RefNbr;
          longCache.SetValueExt<INRegisterExt_GRR.usrINRegisterOriginAdjustment>(adjustment, register.RefNbr);
          adjustmentExt_GRA.UsrOrderNbr = registerExt_GRA.UsrOrderNbr;
          longCache.SetValueExt<INRegisterExt_GRA.usrOrderNbr>(adjustment, registerExt_GRA.UsrOrderNbr);
          
          longCache.Update(adjustment);
        
          tmsg.AddMsg(false, "Updated adjustment extensions with register details.");
        
          longCache.Persist(PXDBOperation.Update);
          tmsg.AddMsg(false, $"Adjustment {adjustment.RefNbr} saved successfully.");

          INAdjustmentEntry adjustmentEntryGraph = methods.AddStockAdjustmentLines(longGraph, longCache, register, adjustment, tmsg);

          if (adjustmentEntryGraph == null)
            return;

          adjustmentEntryGraph.SelectTimeStamp();
          adjustmentEntryGraph.Persist();
    
          throw new PXRedirectRequiredException(adjustmentEntryGraph, false, "IN Register"){Mode = PXBaseRedirectException.WindowMode.Same};
        }
        catch (Exception ex)
        {
          tmsg.AddMsg(false, $"Error in GRR_INReceiptEntry.UsrNullifyReceipt: {ex.Message}");
          throw;
        }
        finally
        {
          tmsg.AddMsg(true, $"End GRR_INReceiptEntry.UsrNullifyReceipt");
        }
      });
    }
  
    protected void INRegister_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
    {      
      var register = (INRegister)e.Row;

      INRegisterExt_GRR registerExt_GRR = register.GetExtension<INRegisterExt_GRR>();
      INRegisterExt_GRA registerExt_GRA = register.GetExtension<INRegisterExt_GRA>();

      bool isNotNullified = (registerExt_GRR.UsrINRegisterAdjustmentNbr == null);

      usrNullifyReceipt.SetEnabled(isNotNullified);
    }
      
    private TraceMessageCollector tmsg;
    private GRR_INReceipt_Methods methods;
 
    public override void Initialize()
    {
      base.Initialize();
      tmsg = new TraceMessageCollector();
      methods = new GRR_INReceipt_Methods();
    }
  }
}
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter