private void ProcessSalesInvoiceBatch(SalesInvoiceCreditNoteDto[] source)
        {
            const int itemsToCreateCount = 2;
            const int itemsToUpdateCount = 2;
            const int itemsToDeleteCount = 2;

            List<BatchItem<SalesInvoiceCreditNoteDto>> batchSalesInvoices = new List<BatchItem<SalesInvoiceCreditNoteDto>>();

            // Prepare batch items to create.
            SalesInvoiceGenerationParameters parameters = GetParametersForSingleSalesInvoiceCreation();
            for (int i = 0; i < itemsToCreateCount; i++)
            {
                batchSalesInvoices.Add(new BatchItem<SalesInvoiceCreditNoteDto>
                {
                    item = SampleDtoGenerator.GenerateSalesInvoice(parameters),
                    opCode = BatchOperationCodes.Create
                });
            }

            int sourceIndex = 0;

            // Prepare batch items to update.
            for (int i = 0; i < itemsToUpdateCount; i++)
            {
                SalesInvoiceCreditNoteDto salesInvoiceToUpdate = source[sourceIndex];
                ModifySalesInvoiceForUpdate(salesInvoiceToUpdate);
                batchSalesInvoices.Add(new BatchItem<SalesInvoiceCreditNoteDto>
                {
                    item = salesInvoiceToUpdate,
                    opCode = BatchOperationCodes.Update
                });
                sourceIndex++;
            }

            // Prepare batch items to delete.
            for (int i = 0; i < itemsToDeleteCount; i++)
            {
                batchSalesInvoices.Add(new BatchItem<SalesInvoiceCreditNoteDto>
                {
                    item = new SalesInvoiceCreditNoteDto { id = source[sourceIndex].id, timestamp = source[sourceIndex].timestamp },
                    opCode = BatchOperationCodes.Delete
                });
                sourceIndex++;
            }

            // Execute batch operation.
            BatchItemProcessResult<SalesInvoiceCreditNoteDto>[] batchResult = ProcessBatch(batchSalesInvoices.ToArray(), ApiClientProvider.Default.SalesInvoices.ProcessBatch);

            // Display batch results.
            Tracer.WriteLine("Batch of Sales Invoices was processed:");

            IEnumerable<long> createdItemsIds = batchResult.Take(itemsToCreateCount).Select(itemResult => itemResult.id);
            Tracer.WriteLine("{0} items were created. Ids: {1}.", itemsToCreateCount, String.Join(", ", createdItemsIds));

            IEnumerable<long> updatedItemsIds = batchResult.Skip(itemsToCreateCount).Take(itemsToUpdateCount).Select(itemResult => itemResult.id);
            Tracer.WriteLine("{0} items were updated. Ids: {1}.", itemsToUpdateCount, String.Join(", ", updatedItemsIds));

            IEnumerable<long> deletedItemsIds = batchResult.Skip(itemsToCreateCount + itemsToUpdateCount).Take(itemsToDeleteCount).Select(itemResult => itemResult.id);
            Tracer.WriteLine("{0} items were deleted. Ids: {1}.", itemsToDeleteCount, String.Join(", ", deletedItemsIds));
            Tracer.WriteLine();
        }
        private void UpdateSingleSalesInvoice(SalesInvoiceCreditNoteDto salesInvoice)
        {
            ApiClientProvider.Default.SalesInvoices.Update(salesInvoice.id, salesInvoice);

            Tracer.WriteLine("Single Sales Invoice with Id {0} was updated.", salesInvoice.id);
            Tracer.WriteLine();
        }
        protected void ModifySalesInvoiceForUpdate(SalesInvoiceCreditNoteDto salesInvoice)
        {
            salesInvoice.total = 75.6m;
            salesInvoice.totalVAT = 11.6m;

            var productTran = salesInvoice.productTrans.First();
            productTran.unitPrice = 8m;
            productTran.acEntries.First().value = 14m;
        }