public void UptadeOfPaymentShipping()
        {
            var selectedPaymentShipping = new List <JurisdictionRelation>();

            foreach (var selectedJurisdiction in SelectedJurisdictions)
            {
                var itemToAdd = new JurisdictionRelation
                {
                    JurisdictionId      = selectedJurisdiction.JurisdictionId,
                    JurisdictionGroupId = InnerItem.JurisdictionGroupId
                };

                selectedPaymentShipping.Add(itemToAdd);
            }

            var paymentShippingForDelete =
                InnerItem.JurisdictionRelations.Where(
                    x => selectedPaymentShipping.All(ps => ps.JurisdictionId != x.JurisdictionId)).ToList();

            foreach (var paymentShippingToDelete in paymentShippingForDelete)
            {
                InnerItem.JurisdictionRelations.Remove(paymentShippingToDelete);
                //repository.Attach(paymentShippingToDelete);
                //repository.Remove(paymentShippingToDelete);
            }

            foreach (var paymentShippingToAdd in selectedPaymentShipping)
            {
                var sameItemFromInnerItem =
                    InnerItem.JurisdictionRelations.SingleOrDefault(
                        pmsm =>
                        pmsm.JurisdictionGroupId == paymentShippingToAdd.JurisdictionGroupId &&
                        pmsm.JurisdictionId == paymentShippingToAdd.JurisdictionId);

                if (sameItemFromInnerItem != null)
                {
                    continue;
                }

                InnerItem.JurisdictionRelations.Add(paymentShippingToAdd);
            }
        }
        public void Can_run_activity_calculatetaxtotals()
        {
            var orderGroup = CreateOrderConstant();

            var catrepository = new Mock <ICatalogRepository>();
            var items         = new List <Item>();

            orderGroup.OrderForms[0].Shipments[0].ShipmentItems.ToList().ForEach(item => items.Add(new Product
            {
                ItemId      = item.LineItem.CatalogItemId,
                TaxCategory = "472b9809-3530-4d95-9886-cbddcaa0b72e"
            }));

            orderGroup.OrderForms[0].Shipments[0].ShippingCost = 10;

            catrepository.Setup(x => x.Items).Returns(() => items.ToArray().AsQueryable());
            catrepository.SetupAllProperties();

            var taxrepository = new Mock <ITaxRepository>();
            var taxes         = new[]
            {
                new Tax {
                    Name = "US Shipment tax", TaxType = (int)TaxTypes.ShippingTax, SortOrder = 1
                },
                new Tax {
                    Name = "US Sales tax", TaxType = (int)TaxTypes.SalesTax, SortOrder = 1
                }
            };

            var jurisdiction = new Jurisdiction
            {
                Code             = "VAT",
                CountryCode      = "USA",
                JurisdictionType = (int)JurisdictionTypes.All
            };

            var jurisdictionGroup = new JurisdictionGroup
            {
                DisplayName      = "USA VAT",
                Code             = "USAVAT",
                JurisdictionType = (int)JurisdictionTypes.All
            };
            var jurisdictionRel = new JurisdictionRelation
            {
                JurisdictionGroup   = jurisdictionGroup,
                JurisdictionGroupId = jurisdictionGroup.JurisdictionGroupId,
                Jurisdiction        = jurisdiction,
                JurisdictionId      = jurisdiction.JurisdictionId
            };

            jurisdictionGroup.JurisdictionRelations.Add(jurisdictionRel);

            taxes[0].TaxValues.Add(new TaxValue()
            {
                AffectiveDate       = new DateTime(2013, 6, 1),
                Percentage          = 18,
                TaxCategory         = "472b9809-3530-4d95-9886-cbddcaa0b72e",
                TaxId               = taxes[0].TaxId,
                Tax                 = taxes[0],
                JurisdictionGroup   = jurisdictionGroup,
                JurisdictionGroupId = jurisdictionGroup.JurisdictionGroupId
            });

            taxes[1].TaxValues.Add(new TaxValue()
            {
                AffectiveDate       = new DateTime(2013, 6, 1),
                Percentage          = 5,
                TaxCategory         = "472b9809-3530-4d95-9886-cbddcaa0b72e",
                TaxId               = taxes[1].TaxId,
                Tax                 = taxes[1],
                JurisdictionGroup   = jurisdictionGroup,
                JurisdictionGroupId = jurisdictionGroup.JurisdictionGroupId
            });

            taxrepository.Setup(x => x.Taxes).Returns(taxes.AsQueryable);
            taxrepository.SetupAllProperties();

            var activity = new CalculateTaxActivity(catrepository.Object, taxrepository.Object, CacheRepository);

            var result = InvokeActivity(activity, orderGroup);

            var order = result.OrderGroup;

            // now check totals

            // Order totals
            Assert.Equal(order.TaxTotal, 660.24M);
            Assert.Equal(order.OrderForms[0].Shipments[0].ItemTaxTotal, 609.84M);
            Assert.Equal(order.OrderForms[0].Shipments[0].ShippingTaxTotal, 12.6M);
        }
        public override string Import(string catalogId, string propertySetId, ImportItem[] systemValues, ImportItem[] customValues, IRepository repository)
        {
            var _error = string.Empty;

            _repository = (IOrderRepository)repository;

            var action = GetAction(systemValues.First(x => x.Name == "Action").Value);

            switch (action)
            {
            case ImportAction.Insert:
                var itemI = systemValues.FirstOrDefault(y => y.Name == "Code");

                if (itemI != null)
                {
                    var originalItem = _repository.JurisdictionGroups.Where(x => x.Code == itemI.Value).FirstOrDefault();
                    if (originalItem == null)
                    {
                        var addItem = InitializeItem(null, systemValues);
                        _repository.Add(addItem);
                        originalItem = addItem;
                    }

                    var jurisdictionCode = systemValues.First(x => x.Name == "JurisdictionCode").Value;

                    if (jurisdictionCode != null)
                    {
                        var jItem = _repository.Jurisdictions.Where(x => x.Code == jurisdictionCode).SingleOrDefault();
                        if (jItem != null)
                        {
                            var relation = new JurisdictionRelation()
                            {
                                JurisdictionId = jItem.JurisdictionId, JurisdictionGroupId = originalItem.JurisdictionGroupId
                            };
                            _repository.Add(relation);
                        }
                    }
                }

                break;

            case ImportAction.InsertAndReplace:
                var itemR = systemValues.FirstOrDefault(y => y.Name == "Code");
                if (itemR != null)
                {
                    var originalItem = _repository.JurisdictionGroups.Where(x => x.Code == itemR.Value).SingleOrDefault();
                    if (originalItem != null)
                    {
                        _repository.Remove(originalItem);
                    }
                }

                var replaceItem = InitializeItem(null, systemValues);
                _repository.Add(replaceItem);
                break;

            case ImportAction.Update:
                var itemU = systemValues.FirstOrDefault(y => y.Name == "JurisdictionCode");
                if (itemU != null)
                {
                    var origItem = _repository.JurisdictionGroups.Where(x => x.Code == itemU.Value).SingleOrDefault();
                    if (origItem != null)
                    {
                        InitializeItem(origItem, systemValues);
                        _repository.Update(origItem);
                    }
                }
                break;

            case ImportAction.Delete:
                var itemD = systemValues.FirstOrDefault(y => y.Name == "JurisdictionCode");
                if (itemD != null)
                {
                    var deleteItem = _repository.JurisdictionGroups.Where(x => x.Code == itemD.Value).SingleOrDefault();
                    if (deleteItem != null)
                    {
                        _repository.Remove(deleteItem);
                    }
                }
                break;
            }
            return(_error);
        }