Как изменить внешний вид типов APInvoice (счет, корректировка кредита и т. Д.)? - PullRequest
1 голос
/ 21 июня 2019

У клиента возникают проблемы при вводе дебетовых и кредитовых корректировок в дебетовые и кредитовые корректировки, поскольку они более знакомы с терминами дебетовые и кредитовые авизо. Из-за того, что они путают их, они часто вводят корректировку по дебету, когда они хотят ввести кредитную корректировку. Как мы можем изменить внешний вид Дебетовых и Кредитных корректировок, чтобы они отображались как Кредитные и Дебетовые авизо?

Мы проследили источник, из которого APInvoice получает значения DocType, в файл PX.Objects \ AP \ Descriptor \ Messages.cs. Однако мы не уверены, как получить к нему доступ через проект настройки.

using System;

using PX.Common;

namespace PX.Objects.AP
{
    [PXLocalizable(Messages.Prefix)]
    public static class Messages
    {
        // Add your messages here as follows (see line below):
        // public const string YourMessage = "Your message here.";
        #region Validation and Processing Messages

        #region Translatable Strings used in the code

        #region Graph Names

        #region DAC Names

        #region Document Type

        public const string Invoice = "Bill";
        public const string CreditAdj = "Credit Adj.";
        public const string DebitAdj = "Debit Adj.";
        public const string Check = "Check";
        public const string Prepayment = "Prepayment";
        public const string Refund = "Vendor Refund";

Мы хотим, чтобы CreditAdj был равен "Дебетовое авизо", а DebitAdj - "Кредитового авизо". Пожалуйста, дайте нам знать, если это возможно, и если есть какие-либо известные проблемы с попыткой изменить эти значения или если это не очень хорошая практика.

Редактировать: Теперь, когда мне удалось внедрить изменения меток благодаря ответу Самвела, я попытался сделать что-то похожее для APPayment. Возникла проблема, при которой при загрузке экрана появляется ошибка:
Ошибка: длина массива значений не равна длине массива меток. Имя параметра: позволено метки

Мой новый код выглядит следующим образом:

APPaymentEntry:

    public class APPaymentEntry_Extension : PXGraphExtension<APPaymentEntry>
    { 
       #region Event Handlers
       [PXDBString(3, IsKey = true, IsFixed = true)]
       [PXDefault]
       [PXUIField(DisplayName = "Type", Visibility = 
                  PXUIVisibility.SelectorVisible, Enabled = true, TabOrder = 0)]
       [PXFieldDescription]
       [CustomAPPaymentTypeList]

       protected virtual void APPayment_DocType_CacheAttached(PXCache sender)
       {
       }
       #endregion
  }

CustomAPPaymentType:

  public class CustomAPPaymentType : APPaymentType
  {

      public new static readonly string[] NewLabels = new string[]
      {
        "Check",
        "Credit Memo",
        "Prepayment",
        "Vendor Refund",
        "Voided Refund",
        "Voided Check"
      };

      public new class ListAttribute : PXStringListAttribute
      {
          public ListAttribute() : base(APPaymentType.Values, CustomAPPaymentType.NewLabels )
          {
          }
      }

  }

CustomAPPaymentTypeListAttribute

    public class CustomAPPaymentTypeListAttribute : CustomAPPaymentType.ListAttribute
  {
     public override void CacheAttached(PXCache sender)
    {
          this._AllowedValues = new string[]
                                      {
                                      "CHK",
                                      "ADR",
                                      "PPM",
                                      "REF",
                                      "VRF",
                                      "VCK"
                                      };
          this._AllowedLabels = new string[]
                                      {
                                      "Check",
                                      "Credit Memo",
                                      "Prepayment",
                                      "Vendor Refund",
                                      "Voided Refund",
                                      "Voided Check"
                                      };
          this._NeutralAllowedLabels = new string[]
                                      {
                                      "Check",
                                      "Credit Memo",
                                      "Prepayment",
                                      "Vendor Refund",
                                     "Voided Refund",
                                      "Voided Check"
                                      };
          base.CacheAttached(sender);
    }
  }

Я не уверен, как поступить, похоже, у меня слишком много «Ярлыков» или «Ценностей», но неясно, по какому. Я пытался быть максимально точным по отношению к текущим настройкам для текущих типов оплаты APP, какой-нибудь совет, где я ошибся?

1 Ответ

1 голос
/ 21 июня 2019

Вы можете достичь этой цели следующим образом:

ПРЕДУПРЕЖДЕНИЕ приведенная ниже настройка не меняет метки «Дебет» и «Кредитный адгезив» на «Кредит» и «Дебетовое авизо» во всей системе, для этого вам потребуется изменить атрибуты для все ЦАП.

  1. Во-первых, вам нужно изменить метки в базовом атрибуте, который равен APInvoiceType.List, я буду наследовать от APInvoiceType для выполнения этого, как показано ниже:

    public class CustomAPInvoiceType : APInvoiceType
    {
    
        public new static readonly string[] NewLabels = new string[]
        {
          "Bill",
          "Debit Memo",
          "Credit Memo",
          "Prepayment"
        };
    
        public new class ListAttribute : PXStringListAttribute
        {
            public ListAttribute() : base(APInvoiceType.Values, CustomAPInvoiceType.NewLabels )
            {
            }
        }
    }
    
  2. Теперь вам нужно изменить метки в APMigrationModeDependentInvoiceTypeListAttribute, для этого я буду наследовать от CustomAPInvoiceType.ListAttribute, который я определил на предыдущем шаге, как показано ниже:

    public class CustomAPMigrationModeDependentInvoiceTypeListAttribute : CustomAPInvoiceType.ListAttribute
    {
        public override void CacheAttached(PXCache sender)
        {
            APSetup apsetup = (sender.Graph.Caches[typeof(APSetup)].Current as APSetup) ?? PXSelectBase<APSetup, PXSelect<APSetup>.Config>.SelectWindowed(sender.Graph, 0, 1, Array.Empty<object>());
            if (apsetup != null)
            {
                bool? migrationMode = apsetup.MigrationMode;
                bool flag = true;
                if (migrationMode.GetValueOrDefault() == flag & migrationMode != null)
                {
                    this._AllowedValues = new string[]
                                                {
                                                "INV",
                                                "ADR",
                                                "ACR"
                                                };
                    this._AllowedLabels = new string[]
                                                {
                                                "Bill",
                                                "Credit Memo",
                                                "Debit Memo"
                                                };
                    this._NeutralAllowedLabels = new string[]
                                                {
                                                "Bill",
                                                "Credit Memo",
                                                "Debit Memo"
                                                };
                    base.CacheAttached(sender);
                    return;
                }
            }
            base.CacheAttached(sender);
        }
    }
    
  3. Последний шаг - применить этот атрибут из поля шага 2 к полю DocType, мы сделаем это с помощью обработчика событий CacheAttached и PXGraphExtension:

    public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry>
    {
        #region Event Handlers
        [PXDBString(3, IsKey = true, IsFixed = true)]
        [PXDefault]
        [PXUIField(DisplayName = "Type", Visibility = PXUIVisibility.SelectorVisible, Enabled = true, TabOrder = 0)]
        [PXFieldDescription]
        [CustomAPMigrationModeDependentInvoiceTypeList]
    
        protected virtual void APInvoice_DocType_CacheAttached(PXCache sender)
        {
        }
        #endregion
    }
    

После публикации этого кода вы увидите, что в раскрывающемся списке для типа отображаются кредитовые и дебетовые авизо, как на снимке экрана ниже:

enter image description here

...