XeroAccountingApiException: 400: счет-фактура недействителен для изменения - PullRequest
0 голосов
/ 26 сентября 2018

Я получаю сообщение об ошибке проверки от API Xero:

Счет-фактура недействителен для изменения

Сообщение слишком общее, и мы понятия не имеемпочему мы получаем или как это исправить.

Я пробовал разные значения статуса:

  • ПРОЕКТ
  • УПОЛНОМОЧЕНО

Но я получаю тот же ответ:

{
  "ErrorNumber": 10,
  "Type": "ValidationException",
  "Message": "A validation exception occurred",
  "Elements": [
    {
      "Type": "ACCPAY",
      "InvoiceID": "1cb8f5c6-xxxx-xxxx-xxxx-9ca48a1cac06",
      "InvoiceNumber": "CS-001854",
      "Payments": [],
      "CreditNotes": [],
      "Prepayments": [],
      "Overpayments": [],
      "AmountDue": 1350.00,
      "HasErrors": true,
      "IsDiscounted": false,
      "Attachments": [],
      "Contact": {
        "ContactID": "3dd542c0-xxxx-xxxx-xxxx-176cc1c484d8",
        "Addresses": [],
        "Phones": [],
        "ContactGroups": [],
        "SalesTrackingCategories": [],
        "PurchasesTrackingCategories": [],
        "ContactPersons": [],
        "Attachments": [],
        "HasValidationErrors": false,
        "ValidationErrors": [],
        "Warnings": []
      },
      "DateString": "2018-08-31T00:00:00",
      "Date": "\/Date(1535673600000+0000)\/",
      "DueDateString": "2018-09-14T00:00:00",
      "DueDate": "\/Date(1536883200000+0000)\/",
      "Status": "DRAFT",
      "LineAmountTypes": "Exclusive",
      "LineItems": [
        {
          "Description": "Services",
          "UnitAmount": 450.00,
          "TaxType": "NONE",
          "TaxAmount": 0.00,
          "LineAmount": 450.00,
          "AccountCode": "6021",
          "Tracking": [],
          "Quantity": 1.0000,
          "ValidationErrors": [],
          "Warnings": []
        },
        {
          "Description": "Services",
          "UnitAmount": 450.00,
          "TaxType": "NONE",
          "TaxAmount": 0.00,
          "LineAmount": 450.00,
          "AccountCode": "6021",
          "Tracking": [],
          "Quantity": 1.0000,
          "ValidationErrors": [],
          "Warnings": []
        },
        {
          "Description": "Services",
          "UnitAmount": 450.00,
          "TaxType": "NONE",
          "TaxAmount": 0.00,
          "LineAmount": 450.00,
          "AccountCode": "6021",
          "Tracking": [],
          "Quantity": 1.0000,
          "ValidationErrors": [],
          "Warnings": []
        }
      ],
      "SubTotal": 1350.00,
      "TotalTax": 0.00,
      "Total": 1350.00,
      "CurrencyCode": "GBP",
      "ValidationErrors": [
        {
          "Message": "Invoice not of valid status for modification"
        }
      ],
      "Warnings": []
    }
  ]
}

Ссылка:

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете изменять только счета-фактуры, которые имеют статус: «ПРОЕКТ» или «ОТПРАВЛЕНО», если у него есть какой-либо другой статус, вы не можете изменить его, вам нужно удалить его и создать новый.

Я полагаю, что вы, вероятно, пытаетесь изменить «УПОЛНОМОЧЕННЫЙ» счет, который не разрешен через API.

https://developer.xero.com/documentation/api/invoices

РЕДАКТИРОВАТЬ: вам необходимо либо удалить, либо аннулировать счет в зависимости отна статус.Вот выдержка из моего кода на C # с использованием .NET API.Если счет-фактура АВТОРИЗОВАН, вам нужно установить для него статус VOIDED, если он ЧЕРН. Или ОТПРАВЛЕН, вы установите его статус УДАЛЕНО

        var invoice = new Invoice();
        var api = XeroApiHelper.CoreApi();
        try
        {
            invoice = api.Invoices.Find(invoiceno);
        }
        catch (Exception ex)
        {
            // Handle the exception
        }
        if (invoice.AmountPaid == null || (invoice.AmountPaid != null && invoice.AmountPaid == 0))
        {
            if (invoice.Status == InvoiceStatus.Voided || invoice.Status == InvoiceStatus.Deleted)
            {
                //Invoice is already deleted or voided
                return false;
            }
            invoice.Status = invoice.Status == InvoiceStatus.Authorised ? InvoiceStatus.Voided : InvoiceStatus.Deleted;
            try
            {
                api.Invoices.Update(new List<Invoice> { invoice });
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return true;
        }
        // Invoice has a payment on it
        return false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...