public virtual void InsertAndEmail(InvoiceDto invoice, int templateUid, EmailMessageDto emailMessage)
 {
     TasksRunner tasksRunner = new TasksRunner(this.WSAccessKey, this.FileUid);
     tasksRunner.Tasks.Add(this.CreateInsertTask(invoice, templateUid, emailMessage));
     this.HandleInsertResult(tasksRunner.Execute(), invoice);
     invoice.IsSent = true;	//	Reaches here - no error. Assume invoice has been sent successfully.
 }
        public InvoiceDto GetSale1()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Item);

            dto.Date = DateTime.Today;
            dto.ContactUid = this.MrSmith.Uid;
            dto.Summary = "Test Insert Item Sale";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = dto.Date.AddMonths(1);
            dto.Layout = InvoiceLayout.Item;
            dto.Status = InvoiceStatus.Invoice;
            dto.InvoiceNumber = "<Auto Number>";

            ItemInvoiceItemDto item = null;

            item = new ItemInvoiceItemDto();
            item.Quantity = 1;
            item.InventoryItemUid = this.Item1.Uid;
            item.Description = this.Item1.Description;
            item.TaxCode = TaxCode.SaleInclGst;
            item.UnitPriceInclTax = this.Item1.RrpInclTax;
            dto.Items.Add(item);

            dto.Tags = "CC";

            return dto;
        }
        public InvoiceDto GetItemSale()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Item);

            dto.Date = DateTime.Parse("6-Oct-05");
            dto.ContactUid = this.MrSmith.Uid;
            dto.Summary = "Test Insert Item Sale";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = DateTime.Parse("6-Nov-05");
            dto.Layout = InvoiceLayout.Item;
            dto.Status = InvoiceStatus.Invoice;
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO333";

            ItemInvoiceItemDto item = null;

            item = new ItemInvoiceItemDto();
            item.Quantity = 2;
            item.InventoryItemUid = this.AsusLaptop.Uid;
            item.Description = "Asus Laptop";
            item.TaxCode = TaxCode.SaleInclGst;
            item.UnitPriceInclTax = 1200.75M;
            item.PercentageDiscount = 12.50M;

            dto.Items.Add(item);

            item = new ItemInvoiceItemDto();
            item.Quantity = 5.125M;
            item.InventoryItemUid = this.Cat5Cable.Uid;
            item.Description = "Cat 5 Cable (in meter)";
            item.TaxCode = TaxCode.SaleGstFree;
            item.UnitPriceInclTax = 2.1234M;
            dto.Items.Add(item);

            item = new ItemInvoiceItemDto();
            item.Quantity = 3;
            item.InventoryItemUid = this.Cat5Cable.Uid;
            item.Description = "Cat 5 Cable (in meter)";
            item.TaxCode = TaxCode.SaleExports;
            item.UnitPriceInclTax = 5.125M;
            dto.Items.Add(item);

            QuickPaymentDto payment = new QuickPaymentDto();
            payment.DatePaid = dto.Date;
            payment.BankedToAccountUid = this.StGeorge.Uid;
            payment.Reference = "C-001-023";
            payment.Amount = 222.22M;

            dto.QuickPayment = payment;

            return dto;
        }
        public virtual void CreatePurchaseForInventoryItemsUsed()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Purchase, InvoiceLayout.Item);

            dto.Date				= DateTime.Today.Date;
            dto.ContactUid			= this.MrSmith.Uid;
            dto.Summary				= "Invoice Tests - CreatePurchaseForInventoryItemsUsed()";
            dto.Notes				= "From REST";
            dto.DueOrExpiryDate		= dto.Date.AddMonths(1);
            dto.Status				= InvoiceStatus.Invoice;
            dto.PurchaseOrderNumber = "<Auto Number>";

            ItemInvoiceItemDto item = null;

            item = new ItemInvoiceItemDto();
            item.Quantity			= 10000;
            item.InventoryItemUid	= this.AsusLaptop.Uid;
            item.Description		= this.AsusLaptop.Description;
            item.TaxCode			= TaxCode.ExpInclGst;
            item.UnitPriceInclTax	= 1000M;
            dto.Items.Add(item);

            item = new ItemInvoiceItemDto();
            item.Quantity			= 10000;
            item.InventoryItemUid	= this.HardDisk.Uid;
            item.Description		= this.HardDisk.Description;
            item.TaxCode			= TaxCode.ExpInclGst;
            item.UnitPriceInclTax	= 99.95M;
            dto.Items.Add(item);

            item = new ItemInvoiceItemDto();
            item.Quantity			= 500000;
            item.InventoryItemUid	= this.Cat5Cable.Uid;
            item.Description		= this.Cat5Cable.Description;
            item.TaxCode			= TaxCode.ExpInclGst;
            item.UnitPriceInclTax	= 0.95M;
            dto.Items.Add(item);

            new InvoiceProxy().Insert(dto);
        }
        public InvoiceDto GetServiceSale()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Service);

            dto.Date = DateTime.Parse("30-Sep-05");
            dto.ContactUid = this.MrSmith.Uid;
            dto.Summary = "Test POST sale";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = DateTime.Parse("1-Dec-05");
            dto.Status = "I";
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO222";
            dto.IsSent = false;

            ServiceInvoiceItemDto item = new ServiceInvoiceItemDto();
            item.Description = "Design & Development of REST WS";
            item.AccountUid = this.IncomeService.Uid;
            item.TaxCode = TaxCode.SaleInclGst;
            item.TotalAmountInclTax = 2132.51M;
            dto.Items.Add(item);

            item = new ServiceInvoiceItemDto();
            item.Description = "Subscription to XYZ";
            item.AccountUid = this.IncomeSubscription.Uid;
            item.TaxCode = TaxCode.SaleInclGst;
            item.TotalAmountInclTax = 11.22M;
            dto.Items.Add(item);

            QuickPaymentDto payment = new QuickPaymentDto();
            payment.DatePaid = dto.Date;
            payment.BankedToAccountUid = this.Westpac.Uid;
            payment.Reference = "CASH";
            payment.Summary = "Quick payment from NUnitTests.";
            payment.Amount = 100;

            dto.QuickPayment = payment;

            return dto;
        }
        protected static void AssertEqual(InvoiceDto expected, InvoiceDto actual)
        {
            Assert.AreEqual(expected.Uid, actual.Uid, "Different uid.");
            Assert.AreEqual(expected.LastUpdatedUid, actual.LastUpdatedUid, "Different last updated uid.");
            Assert.AreEqual(expected.TransactionType, actual.TransactionType, "Different transaction type.");
            Assert.AreEqual(expected.Date, actual.Date, "Different date.");
            Assert.AreEqual(expected.ContactUid, actual.ContactUid, "Different contact uid.");
            Assert.AreEqual(expected.ShipToContactUid, actual.ShipToContactUid, "Different ship to contact uid.");
            Assert.AreEqual(expected.Summary, actual.Summary, "Different summary.");
            Assert.AreEqual(expected.Notes, actual.Notes, "Different notes.");
            Assert.AreEqual(expected.RequiresFollowUp, actual.RequiresFollowUp, "Different requires follow up.");
            Assert.AreEqual(expected.DueOrExpiryDate, actual.DueOrExpiryDate, "Different due date or expiry date.");
            Assert.AreEqual(expected.Layout, actual.Layout, "Different layout.");
            Assert.IsNotNullOrEmpty(actual.Status, "Invoice status must always be set on returned data.");

            var expectedTradingTermsType = expected.TradingTerms.Type;
            if (expected.DueOrExpiryDate != DateTime.MinValue)
            {
                expectedTradingTermsType = 1; // DueIn
            }
            Assert.AreEqual(expectedTradingTermsType, actual.TradingTerms.Type,"Trading terms type not set correctly. DueIn Expected");
            if (!string.IsNullOrWhiteSpace(expected.InvoiceType))
            {
                Assert.AreEqual(expected.InvoiceType, actual.InvoiceType, "Different invoice type.");
            }
            Assert.IsNotNullOrEmpty(actual.InvoiceType, "Invoice Type must always be set on returned data.");
            Assert.AreEqual(expected.InvoiceNumber, actual.InvoiceNumber, "Different invoice number.");
            Assert.AreEqual(expected.PurchaseOrderNumber, actual.PurchaseOrderNumber, "Different purchase order number.");
            Assert.AreEqual(expected.IsSent, actual.IsSent, "Different is sent.");

            if (expected.Layout == InvoiceLayout.Service)
            {
                AssertEqualForServiceInvoiceItems(expected.Items, actual.Items);
            }
            else
            {
                AssertEqualForItemInvoiceItems(expected.Items, actual.Items);
            }
        }
        public InvoiceDto GetUnpaidServiceSale()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Service);

            dto.Date = DateTime.Parse("30-Sep-05");
            dto.ContactUid = this.MrsSmith.Uid;
            dto.Summary = "Test POST sale";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = DateTime.Parse("1-Dec-05");
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO222";

            ServiceInvoiceItemDto item = new ServiceInvoiceItemDto();
            item.Description = "Design & Development of REST WS";
            item.AccountUid = this.IncomeHardwareSales.Uid;
            item.TaxCode = "G1";
            item.TotalAmountInclTax = 2132.51M;
            dto.Items.Add(item);

            item = new ServiceInvoiceItemDto();
            item.Description = "Testing";
            item.AccountUid = this.IncomeMisc.Uid;
            item.TaxCode = "G1,G3";
            item.TotalAmountInclTax = 11.22M;
            dto.Items.Add(item);

            return dto;
        }
        public InvoiceDto GetUnpaidItemSale()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Item);

            dto.Date = DateTime.Parse("6-Oct-05");
            dto.ContactUid = this.MrsSmith.Uid;
            dto.Summary = "Test Insert Item Sale";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = DateTime.Parse("6-Nov-05");
            dto.Status = InvoiceStatus.Invoice;
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO333";

            ItemInvoiceItemDto item = null;

            item = new ItemInvoiceItemDto();
            item.Quantity = 2;
            item.InventoryItemUid = this.HardDisk.Uid;
            item.Description = this.HardDisk.Description;
            item.TaxCode = TaxCode.SaleInclGst;
            item.UnitPriceInclTax = 120.75M;
            dto.Items.Add(item);

            item = new ItemInvoiceItemDto();
            item.Quantity = 5.125M;
            item.InventoryItemUid = this.Cat5Cable.Uid;
            item.Description = this.Cat5Cable.Description;
            item.TaxCode = TaxCode.SaleInclGst;
            item.UnitPriceInclTax = 2.555M;
            dto.Items.Add(item);

            return dto;
        }
        public InvoiceDto GetServiceSaleTotalsTest()
        {
            var dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Service);

            dto.Date = DateTime.Parse("30-Sep-05");
            dto.ContactUid = this.MrSmith.Uid;
            dto.Summary = "Test POST sale";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = DateTime.Parse("1-Dec-05");
            dto.Status = "I";
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO23222";
            dto.IsSent = false;

            return dto;
        }
        public InvoiceDto GetServiceSale2()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Service);

            dto.Date = DateTime.Parse("15-Sep-05");
            dto.ContactUid = this.MrsSmith.Uid;
            dto.Summary = "Service Sale 2";
            dto.DueOrExpiryDate = DateTime.Parse("15-Dec-05");
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO123456789";

            ServiceInvoiceItemDto item = new ServiceInvoiceItemDto();
            item.Description = "LINE 1 LINE 1 LINE 1";
            item.AccountUid = this.IncomeService.Uid;
            item.TaxCode = TaxCode.SaleExports;
            item.TotalAmountInclTax = 12345.12M;
            dto.Items.Add(item);

            item = new ServiceInvoiceItemDto();
            item.Description = "Testing";
            item.AccountUid = this.IncomeHardwareSales.Uid;
            item.TaxCode = TaxCode.SaleAdjustments;
            item.TotalAmountInclTax = -123.9M;
            dto.Items.Add(item);

            item = new ServiceInvoiceItemDto();
            item.Description = "Testing";
            item.AccountUid = this.IncomeShipping.Uid;
            item.TaxCode = TaxCode.SaleInclGst;
            item.TotalAmountInclTax = 569.66M;
            dto.Items.Add(item);

            return dto;
        }
        public InvoiceDto GetAdjustmentNote()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Service);

            dto.Date = DateTime.Parse("30-Sep-05");
            dto.ContactUid = this.MrSmith.Uid;
            dto.Summary = "Test Adjustment Note";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = DateTime.Parse("31-Jan-2012");
            // Don't set the status. Use InvoiceType instead. Eventually, InvoiceStatus will be deprecated and replaced with InvoiceType.
            dto.InvoiceType = InvoiceType.AdjustmentNote;
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO222";
            dto.IsSent = false;

            ServiceInvoiceItemDto item = new ServiceInvoiceItemDto();
            item.Description = "Refund";
            item.AccountUid = this.IncomeService.Uid;
            item.TaxCode = TaxCode.SaleInclGst;
            item.TotalAmountInclTax = -1000M;
            dto.Items.Add(item);

            QuickPaymentDto payment = new QuickPaymentDto();
            payment.DatePaid = dto.Date;
            payment.BankedToAccountUid = this.Westpac.Uid;
            payment.Reference = "CASH";
            payment.Summary = "Quick payment from NUnitTests.";
            payment.Amount = -1000;

            dto.QuickPayment = payment;

            return dto;
        }
        private InvoiceDto GetUnpaidServicePurchase(string PONumber = null)
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Purchase, InvoiceLayout.Service);

            dto.Date				= DateTime.Today.Date;
            dto.ContactUid			= this.MrSmith.Uid;
            dto.Summary				= "Test POST Purchase";
            dto.Notes				= "From REST";
            dto.DueOrExpiryDate		= dto.Date.AddMonths(1);
            dto.Status				= InvoiceStatus.Order;
            dto.PurchaseOrderNumber = "<Auto Number>";

            if (!string.IsNullOrWhiteSpace(PONumber))
            {
                dto.PurchaseOrderNumber = PONumber.Trim();
            }

            ServiceInvoiceItemDto item	= new ServiceInvoiceItemDto();
            item.Description			= "Purchase - Line Item 1";
            item.AccountUid				= this.ExpenseOffice.Uid;
            item.TaxCode				= TaxCode.ExpInclGst;
            item.TotalAmountInclTax		= 123.45M;
            dto.Items.Add(item);

            item						= new ServiceInvoiceItemDto();
            item.Description			= "Purchase - Line Item 2";
            item.AccountUid				= this.ExpenseMisc.Uid;
            // item.TaxCode				= TaxCode.ExpInclGstPrivateNonDeductable;
            item.TotalAmountInclTax		= 678.90M;
            dto.Items.Add(item);

            return dto;
        }
        private InvoiceDto GetUnpaidItemPurchase()
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Purchase, InvoiceLayout.Item);

            dto.Date				= DateTime.Today.Date;
            dto.ContactUid			= this.MrSmith.Uid;
            dto.Summary				= "Test Insert Item Purchase";
            dto.Notes				= "From REST";
            dto.DueOrExpiryDate		= dto.Date.AddMonths(1);
            dto.Status				= InvoiceStatus.Invoice;
            dto.InvoiceNumber		= "I123";
            dto.PurchaseOrderNumber = "<Auto Number>";

            ItemInvoiceItemDto item = null;

            item = new ItemInvoiceItemDto();
            item.Quantity			= 100;
            item.InventoryItemUid	= this.HardDisk.Uid;
            item.Description		= this.HardDisk.Description;
            item.TaxCode			= TaxCode.ExpInclGst;
            item.UnitPriceInclTax	= 99.95M;
            dto.Items.Add(item);

            item = new ItemInvoiceItemDto();
            item.Quantity			= 5000;
            item.InventoryItemUid	= this.Cat5Cable.Uid;
            item.Description		= this.Cat5Cable.Description;
            item.TaxCode			= TaxCode.ExpInclGst;
            item.UnitPriceInclTax	= 0.95M;
            dto.Items.Add(item);

            item = new ItemInvoiceItemDto();
            item.Quantity			= 1;
            item.InventoryItemUid	= this.Shipping1.Uid;
            item.Description		= this.Shipping1.Description;
            item.TaxCode			= TaxCode.ExpInclGst;
            item.UnitPriceInclTax	= 111.11M;
            dto.Items.Add(item);

            return dto;
        }
        public InvoiceDto GetServiceSale()
        {
            var dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Service);

            dto.Date = DateTime.Parse("30-Sep-05");
            dto.ContactUid = MrSmith.Uid;
            dto.Summary = "Test POST sale";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = DateTime.Parse("1-Dec-05");
            dto.Status = "I";
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO222";
            dto.IsSent = false;

            var item = new ServiceInvoiceItemDto();
            item.Description = "Design & Development of REST WS";
            item.AccountUid = IncomeService.Uid;
            item.TaxCode = TaxCode.SaleInclGst;
            item.TotalAmountInclTax = 2132.51M;
            dto.Items.Add(item);

            return dto;
        }
 public void InsertAndEmail(InvoiceDto invoice, EmailMessageDto emailMessage)
 {
     this.InsertAndEmail(invoice, 0, emailMessage);
 }
 protected virtual ITask CreateUpdateTask(InvoiceDto invoice, int templateUid, EmailMessageDto emailMessage)
 {
     UpdateInvoiceTask task = (UpdateInvoiceTask) base.CreateUpdateTask(invoice);
     task.EmailToContact = true;
     task.TemplateUid = templateUid;
     task.EmailMessage = emailMessage;
     return task;
 }
        private InvoiceDto GetServicePurchase()
        {
            var dto = new InvoiceDto(TransactionType.Purchase, InvoiceLayout.Service);

            dto.Date = DateTime.Today.Date;
            dto.ContactUid = MrSmith.Uid;
            dto.Summary = "Test POST Purchase";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = dto.Date.AddMonths(1);
            dto.Status = InvoiceStatus.Order;
            dto.PurchaseOrderNumber = "<Auto Number>";

            var item = new ServiceInvoiceItemDto();
            item.Description = "Purchase - Line Item 1";
            item.AccountUid = ExpenseOffice.Uid;
            item.TaxCode = TaxCode.ExpInclGst;
            item.TotalAmountInclTax = 123.45M;
            dto.Items.Add(item);

            item = new ServiceInvoiceItemDto();
            item.Description = "Purchase - Line Item 2";
            item.AccountUid = ExpenseMisc.Uid;
            // item.TaxCode				= TaxCode.ExpInclGstPrivateNonDeductable;
            item.TotalAmountInclTax = 678.90M;
            dto.Items.Add(item);

            return dto;
        }
        public void BuildComboItem()
        {
            ComboItemProxy proxy = new ComboItemProxy();

            ComboItemDto comboItemDto = this.GetComboItem01();
            proxy.Insert(comboItemDto);
            ComboItemDto comboItem = (ComboItemDto)proxy.GetByUid(comboItemDto.Uid);

            // We need to insert stock first using a purchase
            CrudProxy invoiceProxy = new InvoiceProxy();
            InvoiceDto dto = new InvoiceDto(TransactionType.Purchase, InvoiceLayout.Item);
            dto.Date = DateTime.Today.Date;
            dto.ContactUid = this.MrSmith.Uid;
            dto.Summary = "Add stock do we can build ComboItems";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = dto.Date.AddMonths(1);
            dto.Status = InvoiceStatus.Invoice;
            dto.InvoiceNumber = "I123";
            dto.PurchaseOrderNumber = "<Auto Number>";

            decimal unitsToBuild = 12.25M;

            foreach(ComboItemLineItemDto itemInCombo in comboItem.Items)
            {   // "purchase" all the items that are part of this combo item so we have valid stock
                ItemInvoiceItemDto item = new ItemInvoiceItemDto();
                item.Quantity = itemInCombo.Quantity * unitsToBuild;
                item.InventoryItemUid = itemInCombo.Uid;
                item.Description = "Purchasing: " + itemInCombo.Code;
                item.TaxCode = TaxCode.ExpInclGst;
                item.UnitPriceInclTax = 99.95M;
                dto.Items.Add(item);
            }
            invoiceProxy.Insert(dto);

            // Download stock info before
            InventoryItemProxy inventoryItemProxy = new InventoryItemProxy();
            InventoryItemDto inventoryItem = (InventoryItemDto)inventoryItemProxy.GetByUid(comboItemDto.Uid);
            decimal stockOnHand = inventoryItem.StockOnHand;

            // Build the item!
            BuildComboItemResult result = proxy.Build(comboItemDto.Uid, unitsToBuild);
            Assert.AreNotEqual(0, result.Uid);
            Assert.IsNotNull(result.LastUpdatedUid);

            inventoryItem = (InventoryItemDto)inventoryItemProxy.GetByUid(comboItemDto.Uid);
            decimal newStockOnHand = inventoryItem.StockOnHand;
            Assert.AreEqual(stockOnHand + unitsToBuild, newStockOnHand, "We have one extra item in stock");

            // Read Inventory Transfer details
            InventoryTransferProxy transferProxy = new InventoryTransferProxy();
            InventoryTransferDto transfer = (InventoryTransferDto)transferProxy.GetByUid(result.Uid);
            Assert.AreEqual(comboItem.Items.Count+1, transfer.Items.Count); // +1 as we have the combo item the first one

            // confirm first item is the combo with +1
            InventoryTransferItemDto comboItemTransfer = (InventoryTransferItemDto)transfer.Items[0];
            Assert.AreEqual(comboItemDto.Uid, comboItemTransfer.InventoryItemUid);
            Assert.AreEqual(unitsToBuild, comboItemTransfer.Quantity);

            for (int i = 0; i < comboItem.Items.Count; i++)
            {
                ComboItemLineItemDto line = comboItem.Items[i];
                InventoryTransferItemDto item = (InventoryTransferItemDto)transfer.Items[i+1];
                Assert.AreEqual(line.Uid, item.InventoryItemUid);
                Assert.AreEqual(line.Quantity * unitsToBuild, -item.Quantity);
            }
        }
        public void DeleteReferenced()
        {
            ComboItemProxy proxy = new ComboItemProxy();
            ComboItemDto comboItem = this.GetComboItem01();
            proxy.Insert(comboItem);

            // We need to insert stock first using a purchase
            CrudProxy invoiceProxy = new InvoiceProxy();
            InvoiceDto dto = new InvoiceDto(TransactionType.Purchase, InvoiceLayout.Item);
            dto.Date = DateTime.Today.Date;
            dto.ContactUid = this.MrSmith.Uid;
            dto.Summary = "Using a combo item.";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = dto.Date.AddMonths(1);
            dto.Status = InvoiceStatus.Invoice;
            dto.InvoiceNumber = "I123";
            dto.PurchaseOrderNumber = "<Auto Number>";

            decimal unitsToBuild = 12.25M;

            // "purchase" all the items that are part of this combo item so we have valid stock
            ItemInvoiceItemDto item = new ItemInvoiceItemDto();
            item.Quantity = 5;
            item.InventoryItemUid = comboItem.Uid;
            item.Description = "Purchasing: " + comboItem.Description;
            item.TaxCode = TaxCode.ExpInclGst;
            item.UnitPriceInclTax = 99.95M;
            dto.Items.Add(item);
            invoiceProxy.Insert(dto);

            try
            {
                proxy.DeleteByUid(comboItem.Uid);
                Assert.Fail("Expected exception was not thrown.");
            }
            catch (RestException ex)
            {
                Assert.AreEqual("The specified inventory item is referenced by some Transactions and/or Combo Items  and therefore cannot be deleted.", ex.Message);
            }
        }
        private InvoiceDto GetSaleOrder(InventoryItemDto itemDto)
        {
            InvoiceDto dto = new InvoiceDto(TransactionType.Sale, InvoiceLayout.Item);

            dto.Date = DateTime.Parse("6-Oct-05");
            dto.ContactUid = this.MrSmith.Uid;
            dto.Summary = "Test Insert Item Sale";
            dto.Notes = "From REST";
            dto.DueOrExpiryDate = DateTime.Parse("6-Nov-05");
            dto.Layout = InvoiceLayout.Item;
            dto.Status = InvoiceStatus.Order;
            dto.InvoiceNumber = "<Auto Number>";
            dto.PurchaseOrderNumber = "PO333";

            ItemInvoiceItemDto item = null;

            item = new ItemInvoiceItemDto();
            item.Quantity = 5;
            item.InventoryItemUid = itemDto.Uid;
            item.Description = "Asus Laptop";
            item.TaxCode = TaxCode.SaleInclGst;
            item.UnitPriceInclTax = 1200.75M;
            item.PercentageDiscount = 12.50M;

            dto.Items.Add(item);

            return dto;
        }
        private void SetupTransactions()
        {
            CrudProxy proxy = new InvoiceProxy();
            _sale1 = GetServiceSale();
            proxy.Insert(_sale1);
            Assert.IsTrue(_sale1.Uid > 0, "Sale tran uid must be > 0 after insert.");

            _purchase1 = GetServicePurchase();
            proxy.Insert(_purchase1);
            Assert.IsTrue(_purchase1.Uid > 0, "Purchase tran uid must be > 0 after insert.");
        }