public void UpsertSeoInfos(coreModel.SeoInfo[] seoinfos)
        {
            var pkMap = new PrimaryKeyResolvingMap();

            using (var repository = _repositoryFactory())
                using (var changeTracker = GetChangeTracker(repository))
                {
                    var alreadyExistSeoInfos = repository.GetSeoByIds(seoinfos.Select(x => x.Id).ToArray());
                    var target = new { SeoInfos = new ObservableCollection <dataModel.SeoUrlKeyword>(alreadyExistSeoInfos) };
                    var source = new { SeoInfos = new ObservableCollection <dataModel.SeoUrlKeyword>(seoinfos.Select(x => AbstractTypeFactory <dataModel.SeoUrlKeyword> .TryCreateInstance().FromModel(x, pkMap))) };

                    changeTracker.Attach(target);

                    source.SeoInfos.Patch(target.SeoInfos, (sourceSeoUrlKeyword, targetSeoUrlKeyword) => sourceSeoUrlKeyword.Patch(targetSeoUrlKeyword));
                    repository.UnitOfWork.Commit();
                    pkMap.ResolvePrimaryKeys();
                }
        }
        public static DiscountEntity ToDataModel(this coreModel.Discount discount, PrimaryKeyResolvingMap pkMap)
        {
            if (discount == null)
            {
                throw new ArgumentNullException("discount");
            }

            var retVal = new DiscountEntity();

            pkMap.AddPair(discount, retVal);

            retVal.InjectFrom(discount);

            retVal.Currency = discount.Currency.ToString();

            retVal.CouponCode = discount.Coupon;
            return(retVal);
        }
Esempio n. 3
0
        public virtual UserApiKeyEntity FromModel(UserApiKey apiKey, PrimaryKeyResolvingMap pkMap)
        {
            if (apiKey == null)
            {
                throw new ArgumentNullException(nameof(apiKey));
            }


            pkMap.AddPair(apiKey, this);

            Id       = apiKey.Id;
            ApiKey   = apiKey.ApiKey;
            UserName = apiKey.UserName;
            UserId   = apiKey.UserId;
            IsActive = apiKey.IsActive;

            return(this);
        }
Esempio n. 4
0
        public virtual VideoLinkEntity FromModel(VideoLink videolink, PrimaryKeyResolvingMap pkMap)
        {
            if (videolink == null)
            {
                throw new ArgumentNullException(nameof(videolink));
            }

            pkMap.AddPair(videolink, this);

            Id           = videolink.Id;
            Url          = videolink.Url;
            ProductId    = videolink.ProductId;
            CreatedDate  = videolink.CreatedDate;
            ModifiedDate = videolink.ModifiedDate;
            Status       = videolink.Status;

            return(this);
        }
        public virtual StoreTaxProviderEntity FromModel(TaxProvider taxProvider, PrimaryKeyResolvingMap pkMap)
        {
            if (taxProvider == null)
            {
                throw new ArgumentNullException(nameof(taxProvider));
            }

            pkMap.AddPair(taxProvider, this);

            IsActive    = taxProvider.IsActive;
            Code        = taxProvider.Code;
            Description = taxProvider.Description;
            LogoUrl     = taxProvider.LogoUrl;
            Name        = taxProvider.Name;
            Priority    = taxProvider.Priority;

            return(this);
        }
        public coreModel.DynamicContentItem CreateContent(coreModel.DynamicContentItem content)
        {
            var pkMap  = new PrimaryKeyResolvingMap();
            var entity = content.ToDataModel(pkMap);

            using (var repository = _repositoryFactory())
            {
                repository.Add(entity);
                CommitChanges(repository);
                pkMap.ResolvePrimaryKeys();
            }

            _dynamicPropertyService.SaveDynamicPropertyValues(content);

            var retVal = GetContentItemById(entity.Id);

            return(retVal);
        }
Esempio n. 7
0
        public coreModel.Organization Create(coreModel.Organization organization)
        {
            var pkMap  = new PrimaryKeyResolvingMap();
            var entity = organization.ToDataModel(pkMap);

            using (var repository = _repositoryFactory())
            {
                repository.Add(entity);
                CommitChanges(repository);
                pkMap.ResolvePrimaryKeys();
            }

            _dynamicPropertyService.SaveDynamicPropertyValues(organization);

            var retVal = GetById(entity.Id);

            return(retVal);
        }
Esempio n. 8
0
        public void SaveCustomerReviewVotes(CustomerReviewVote[] items)
        {
            if (items == null)
            {
                throw new ArgumentNullException(nameof(items));
            }

            var pkMap = new PrimaryKeyResolvingMap();
            int i     = 0;

#pragma warning disable S3353 // Unchanged local variables should be "const"
#pragma warning disable S1481 // Unused local variables should be removed
            int r = 0;
#pragma warning restore S1481 // Unused local variables should be removed
#pragma warning restore S3353 // Unchanged local variables should be "const"
            using (var repository = _repositoryFactory())
            {
                using (var changeTracker = GetChangeTracker(repository))
                {
                    var alreadyExistEntities = repository.GetVoteByIds(items.Where(m => !m.IsTransient()).Select(x => x.Id).ToArray());
                    foreach (var derivativeContract in items)
                    {
                        var sourceEntity = AbstractTypeFactory <CustomerReviewVoteEntity> .TryCreateInstance().FromModel(derivativeContract, pkMap);

                        var targetEntity = alreadyExistEntities.FirstOrDefault(x => x.Id == sourceEntity.Id);
                        if (targetEntity != null)
                        {
                            changeTracker.Attach(targetEntity);
                            sourceEntity.Patch(targetEntity);
                        }
                        else
                        {
                            repository.Add(sourceEntity);
                        }
                    }

                    var reviewIds = items.Select(x => x.CustomerReviewId).ToArray();
                    UpdateCustomerReviewVotesCount(repository, reviewIds);

                    CommitChanges(repository);
                    pkMap.ResolvePrimaryKeys();
                }
            }
        }
Esempio n. 9
0
        protected virtual void InnerSaveChanges(IEnumerable <CatalogProduct> products, bool disableValidation = false)
        {
            var pkMap          = new PrimaryKeyResolvingMap();
            var changedEntries = new List <GenericChangedEntry <CatalogProduct> >();

            ValidateProducts(products);

            using (var repository = _repositoryFactory())
            {
                var dbExistProducts = repository.GetItemByIds(products.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray(), ItemResponseGroup.ItemLarge);
                foreach (var product in products)
                {
                    var modifiedEntity = AbstractTypeFactory <ItemEntity> .TryCreateInstance().FromModel(product, pkMap);

                    var originalEntity = dbExistProducts.FirstOrDefault(x => x.Id == product.Id);

                    if (originalEntity != null)
                    {
                        changedEntries.Add(new GenericChangedEntry <CatalogProduct>(product, originalEntity.ToModel(AbstractTypeFactory <CatalogProduct> .TryCreateInstance()), EntryState.Modified));
                        modifiedEntity.Patch(originalEntity);
                        //Force set ModifiedDate property to mark a product changed. Special for  partial update cases when product table not have changes
                        originalEntity.ModifiedDate = DateTime.UtcNow;
                    }
                    else
                    {
                        repository.Add(modifiedEntity);
                        changedEntries.Add(new GenericChangedEntry <CatalogProduct>(product, EntryState.Added));
                    }
                }

                //Raise domain events
                _eventPublisher.Publish(new ProductChangingEvent(changedEntries));
                //Save changes in database
                repository.UnitOfWork.Commit();
                pkMap.ResolvePrimaryKeys();
                _eventPublisher.Publish(new ProductChangedEvent(changedEntries));
            }

            //Update SEO
            var productsWithVariations = products.Concat(products.Where(x => x.Variations != null).SelectMany(x => x.Variations)).OfType <ISeoSupport>().ToArray();

            _commerceService.UpsertSeoForObjects(productsWithVariations);
        }
        public virtual SubscriptionEntity FromModel(Subscription subscription, PrimaryKeyResolvingMap pkMap)
        {
            if (subscription == null)
            {
                throw new NullReferenceException("subscription");
            }

            pkMap.AddPair(subscription, this);

            this.InjectFrom(subscription);
            if (subscription.CustomerOrderPrototype != null)
            {
                this.CustomerOrderPrototypeId = subscription.CustomerOrderPrototype.Id;
            }

            this.Status   = subscription.SubscriptionStatus.ToString();
            this.Interval = subscription.Interval.ToString();
            return(this);
        }
Esempio n. 11
0
        public virtual CategoryEntity FromModel(Category category, PrimaryKeyResolvingMap pkMap)
        {
            if (category == null)
            {
                throw new ArgumentNullException(nameof(category));
            }

            pkMap.AddPair(category, this);

            Id           = category.Id;
            CreatedBy    = category.CreatedBy;
            CreatedDate  = category.CreatedDate;
            ModifiedBy   = category.ModifiedBy;
            ModifiedDate = category.ModifiedDate;

            Code      = category.Code;
            Name      = category.Name;
            Priority  = category.Priority;
            TaxType   = category.TaxType;
            CatalogId = category.CatalogId;

            ParentCategoryId = category.ParentId;
            EndDate          = DateTime.UtcNow.AddYears(100);
            StartDate        = DateTime.UtcNow;
            IsActive         = category.IsActive ?? true;

            if (category.PropertyValues != null)
            {
                CategoryPropertyValues = new ObservableCollection <PropertyValueEntity>(AbstractTypeFactory <PropertyValueEntity> .TryCreateInstance().FromModels(category.PropertyValues, pkMap));
            }

            if (category.Links != null)
            {
                OutgoingLinks = new ObservableCollection <CategoryRelationEntity>(category.Links.Select(x => AbstractTypeFactory <CategoryRelationEntity> .TryCreateInstance().FromModel(x)));
            }

            if (category.Images != null)
            {
                Images = new ObservableCollection <ImageEntity>(category.Images.Select(x => AbstractTypeFactory <ImageEntity> .TryCreateInstance().FromModel(x, pkMap)));
            }

            return(this);
        }
        public async Task SaveChangesAsync(Core.Currency.Currency[] currencies)
        {
            if (currencies == null)
            {
                throw new ArgumentNullException(nameof(currencies));
            }

            var pkMap = new PrimaryKeyResolvingMap();

            using (var repository = _repositoryFactory())
            {
                //Ensure that only one Primary currency
                if (currencies.Any(x => x.IsPrimary))
                {
                    var oldPrimaryCurrency = await repository.Currencies.FirstOrDefaultAsync(x => x.IsPrimary);

                    if (oldPrimaryCurrency != null)
                    {
                        oldPrimaryCurrency.IsPrimary = false;
                    }
                }

                foreach (var currency in currencies)
                {
                    var sourceEntry = AbstractTypeFactory <CurrencyEntity> .TryCreateInstance().FromModel(currency);

                    var targetEntry = await repository.Currencies.FirstOrDefaultAsync(x => x.Code == currency.Code);

                    if (targetEntry == null)
                    {
                        repository.Add(sourceEntry);
                    }
                    else
                    {
                        sourceEntry.Patch(targetEntry);
                    }
                }

                await repository.UnitOfWork.CommitAsync();

                CurrencyCacheRegion.ExpireRegion();
            }
        }
Esempio n. 13
0
        public void SaveChanges(IEnumerable <Property> properties)
        {
            var pkMap          = new PrimaryKeyResolvingMap();
            var changedEntries = new List <GenericChangedEntry <Property> >();

            ValidateProperties(properties);

            using (var repository = _repositoryFactory())
            {
                TryAddPredefinedValidationRules(properties);

                var dbExistProperties = repository.GetPropertiesByIds(properties.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray());
                foreach (var property in properties)
                {
                    var modifiedEntity = AbstractTypeFactory <PropertyEntity> .TryCreateInstance().FromModel(property, pkMap);

                    var originalEntity = dbExistProperties.FirstOrDefault(x => x.Id == property.Id);

                    if (originalEntity != null)
                    {
                        changedEntries.Add(new GenericChangedEntry <Property>(property, originalEntity.ToModel(AbstractTypeFactory <Property> .TryCreateInstance()), EntryState.Modified));
                        modifiedEntity.Patch(originalEntity);
                        //Force set ModifiedDate property to mark a product changed. Special for  partial update cases when product table not have changes
                        originalEntity.ModifiedDate = DateTime.UtcNow;
                    }
                    else
                    {
                        repository.Add(modifiedEntity);
                        changedEntries.Add(new GenericChangedEntry <Property>(property, EntryState.Added));
                    }
                }

                //Raise domain events
                _eventPublisher.Publish(new PropertyChangingEvent(changedEntries));
                //Save changes in database
                repository.UnitOfWork.Commit();
                pkMap.ResolvePrimaryKeys();
                _eventPublisher.Publish(new PropertyChangedEvent(changedEntries));

                //Reset catalog cache
                CatalogCacheRegion.ExpireRegion();
            }
        }
        public virtual WebHookEventEntity FromModel(WebhookEvent webHookEvent, PrimaryKeyResolvingMap pkMap)
        {
            if (webHookEvent == null)
            {
                throw new ArgumentNullException(nameof(webHookEvent));
            }

            Id           = webHookEvent.Id;
            CreatedBy    = webHookEvent.CreatedBy;
            CreatedDate  = webHookEvent.CreatedDate;
            ModifiedBy   = webHookEvent.ModifiedBy;
            ModifiedDate = webHookEvent.ModifiedDate;
            EventId      = webHookEvent.EventId;
            WebHookId    = webHookEvent.WebHookId;

            pkMap.AddPair(webHookEvent, this);

            return(this);
        }
        public virtual PropertyEntity FromModel(Property property, PrimaryKeyResolvingMap pkMap)
        {
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }

            pkMap.AddPair(property, this);

            Id           = property.Id;
            CreatedBy    = property.CreatedBy;
            CreatedDate  = property.CreatedDate;
            ModifiedBy   = property.ModifiedBy;
            ModifiedDate = property.ModifiedDate;

            CatalogId  = property.CatalogId;
            CategoryId = property.CategoryId;

            Name = property.Name;
            PropertyValueType = (int)property.ValueType;
            IsMultiValue      = property.Multivalue;
            IsLocaleDependant = property.Multilanguage;
            IsEnum            = property.Dictionary;
            IsRequired        = property.Required;
            IsHidden          = property.Hidden;
            TargetType        = property.Type.ToString();

            if (property.Attributes != null)
            {
                PropertyAttributes = new ObservableCollection <PropertyAttributeEntity>(property.Attributes.Select(x => AbstractTypeFactory <PropertyAttributeEntity> .TryCreateInstance().FromModel(x, pkMap)));
            }

            if (property.DisplayNames != null)
            {
                DisplayNames = new ObservableCollection <PropertyDisplayNameEntity>(property.DisplayNames.Select(x => AbstractTypeFactory <PropertyDisplayNameEntity> .TryCreateInstance().FromModel(x)));
            }

            if (property.ValidationRules != null)
            {
                ValidationRules = new ObservableCollection <PropertyValidationRuleEntity>(property.ValidationRules.Select(x => AbstractTypeFactory <PropertyValidationRuleEntity> .TryCreateInstance().FromModel(x)));
            }
            return(this);
        }
Esempio n. 16
0
        public override OperationEntity FromModel(OrderOperation operation, PrimaryKeyResolvingMap pkMap)
        {
            var shipment = operation as Shipment;

            if (shipment == null)
            {
                throw new NullReferenceException("shipment");
            }

            base.FromModel(shipment, pkMap);

            //Allow to empty address
            this.Addresses = new ObservableCollection <AddressEntity>();
            if (shipment.ShippingMethod != null)
            {
                this.ShipmentMethodCode   = shipment.ShippingMethod.Code;
                this.ShipmentMethodOption = shipment.ShipmentMethodOption;
            }
            if (shipment.DeliveryAddress != null)
            {
                this.Addresses = new ObservableCollection <AddressEntity>(new AddressEntity[] { AbstractTypeFactory <AddressEntity> .TryCreateInstance().FromModel(shipment.DeliveryAddress) });
            }
            if (shipment.Items != null)
            {
                this.Items = new ObservableCollection <ShipmentItemEntity>(shipment.Items.Select(x => AbstractTypeFactory <ShipmentItemEntity> .TryCreateInstance().FromModel(x, pkMap)));
            }
            if (shipment.Packages != null)
            {
                this.Packages = new ObservableCollection <ShipmentPackageEntity>(shipment.Packages.Select(x => AbstractTypeFactory <ShipmentPackageEntity> .TryCreateInstance().FromModel(x, pkMap)));
            }
            if (shipment.TaxDetails != null)
            {
                this.TaxDetails = new ObservableCollection <TaxDetailEntity>(shipment.TaxDetails.Select(x => AbstractTypeFactory <TaxDetailEntity> .TryCreateInstance().FromModel(x)));
            }
            if (shipment.Discounts != null)
            {
                this.Discounts = new ObservableCollection <DiscountEntity>(shipment.Discounts.Select(x => AbstractTypeFactory <DiscountEntity> .TryCreateInstance().FromModel(x)));
            }

            this.Sum = shipment.TotalWithTax;

            return(this);
        }
Esempio n. 17
0
        public static ShoppingCartEntity ToDataModel(this ShoppingCart cart, PrimaryKeyResolvingMap pkMap)
        {
            if (cart == null)
            {
                throw new ArgumentNullException("cart");
            }

            var retVal = new ShoppingCartEntity();

            pkMap.AddPair(cart, retVal);

            retVal.InjectFrom(cart);

            retVal.Currency = cart.Currency.ToString();

            if (cart.Addresses != null)
            {
                retVal.Addresses = new ObservableCollection <AddressEntity>(cart.Addresses.Select(x => x.ToDataModel()));
            }
            if (cart.Items != null)
            {
                retVal.Items = new ObservableCollection <LineItemEntity>(cart.Items.Select(x => x.ToDataModel(pkMap)));
            }
            if (cart.Shipments != null)
            {
                retVal.Shipments = new ObservableCollection <ShipmentEntity>(cart.Shipments.Select(x => x.ToDataModel(retVal, pkMap)));
            }
            if (cart.Payments != null)
            {
                retVal.Payments = new ObservableCollection <PaymentEntity>(cart.Payments.Select(x => x.ToDataModel(pkMap)));
            }
            if (cart.TaxDetails != null)
            {
                retVal.TaxDetails = new ObservableCollection <TaxDetailEntity>();
                retVal.TaxDetails.AddRange(cart.TaxDetails.Select(x => x.ToDataModel()));
            }
            if (cart.Discounts != null)
            {
                retVal.Discounts = new ObservableCollection <DiscountEntity>();
                retVal.Discounts.AddRange(cart.Discounts.Select(x => x.ToDataModel(pkMap)));
            }
            return(retVal);
        }
        public override OperationEntity FromModel(OrderOperation operation, PrimaryKeyResolvingMap pkMap)
        {
            var order = operation as CustomerOrder;

            if (order == null)
            {
                throw new NullReferenceException("order");
            }

            base.FromModel(order, pkMap);

            if (order.Addresses != null)
            {
                this.Addresses = new ObservableCollection <AddressEntity>(order.Addresses.Select(x => AbstractTypeFactory <AddressEntity> .TryCreateInstance().FromModel(x)));
            }
            if (order.Items != null)
            {
                this.Items = new ObservableCollection <LineItemEntity>(order.Items.Select(x => AbstractTypeFactory <LineItemEntity> .TryCreateInstance().FromModel(x, pkMap)));
            }
            if (order.Shipments != null)
            {
                this.Shipments = new ObservableCollection <ShipmentEntity>(order.Shipments.Select(x => AbstractTypeFactory <ShipmentEntity> .TryCreateInstance().FromModel(x, pkMap)).OfType <ShipmentEntity>());
                //Link shipment item with order lineItem
                foreach (var shipmentItemEntity in this.Shipments.SelectMany(x => x.Items))
                {
                    shipmentItemEntity.LineItem = this.Items.FirstOrDefault(x => x.ModelLineItem == shipmentItemEntity.ModelLineItem);
                }
            }
            if (order.InPayments != null)
            {
                this.InPayments = new ObservableCollection <PaymentInEntity>(order.InPayments.Select(x => AbstractTypeFactory <PaymentInEntity> .TryCreateInstance().FromModel(x, pkMap)).OfType <PaymentInEntity>());
            }
            if (order.Discounts != null)
            {
                this.Discounts = new ObservableCollection <DiscountEntity>(order.Discounts.Select(x => AbstractTypeFactory <DiscountEntity> .TryCreateInstance().FromModel(x)));
            }
            if (order.TaxDetails != null)
            {
                this.TaxDetails = new ObservableCollection <TaxDetailEntity>(order.TaxDetails.Select(x => AbstractTypeFactory <TaxDetailEntity> .TryCreateInstance().FromModel(x)));
            }
            this.Sum = order.Total;
            return(this);
        }
        public override MemberDataEntity FromModel(Member member, PrimaryKeyResolvingMap pkMap)
        {
            var organization = member as Organization;

            if (organization != null && organization.ParentId != null)
            {
                this.MemberRelations = new ObservableCollection <MemberRelationDataEntity>();
                var memberRelation = new MemberRelationDataEntity
                {
                    AncestorId       = organization.ParentId,
                    DescendantId     = organization.Id,
                    AncestorSequence = 1
                };
                this.MemberRelations.Add(memberRelation);
            }

            //Call base converter
            return(base.FromModel(member, pkMap));
        }
Esempio n. 20
0
        public void SaveCustomerReviews(CustomerReview[] items)
        {
            if (items == null)
            {
                throw new ArgumentNullException(nameof(items));
            }

            List <string> productIds = new List <string>();
            var           pkMap      = new PrimaryKeyResolvingMap();

            using (var repository = _repositoryFactory())
            {
                using (var changeTracker = GetChangeTracker(repository))
                {
                    var alreadyExistEntities = repository.GetByIds(items.Where(m => !m.IsTransient()).Select(x => x.Id).ToArray());
                    foreach (var derivativeContract in items)
                    {
                        var sourceEntity = AbstractTypeFactory <CustomerReviewEntity> .TryCreateInstance().FromModel(derivativeContract, pkMap);

                        var targetEntity = alreadyExistEntities.FirstOrDefault(x => x.Id == sourceEntity.Id);
                        if (targetEntity != null)
                        {
                            changeTracker.Attach(targetEntity);
                            sourceEntity.Patch(targetEntity);
                        }
                        else
                        {
                            repository.Add(sourceEntity);
                        }
                        productIds.Add(derivativeContract.ProductId);
                    }

                    CommitChanges(repository);
                    pkMap.ResolvePrimaryKeys();
                }
                IEnumerable <string> distinctProductIds = productIds.Distinct();
                foreach (string productId in distinctProductIds)
                {
                    repository.RecalcRatingForProduct(productId);
                }
                CommitChanges(repository);
            }
        }
        public override OperationEntity FromModel(OrderOperation operation, PrimaryKeyResolvingMap pkMap)
        {
            var payment = operation as PaymentIn;

            if (payment == null)
            {
                throw new ArgumentException(@"operation argument must be of type PaymentIn", nameof(operation));
            }

            base.FromModel(payment, pkMap);

            if (payment.PaymentMethod != null)
            {
                GatewayCode = payment.PaymentMethod != null ? payment.PaymentMethod.Code : payment.GatewayCode;
            }

            if (payment.BillingAddress != null)
            {
                Addresses = new ObservableCollection <AddressEntity>(new[] { AbstractTypeFactory <AddressEntity> .TryCreateInstance().FromModel(payment.BillingAddress) });
            }

            if (payment.TaxDetails != null)
            {
                TaxDetails = new ObservableCollection <TaxDetailEntity>(payment.TaxDetails.Select(x => AbstractTypeFactory <TaxDetailEntity> .TryCreateInstance().FromModel(x)));
            }

            if (payment.Discounts != null)
            {
                Discounts = new ObservableCollection <DiscountEntity>(payment.Discounts.Select(x => AbstractTypeFactory <DiscountEntity> .TryCreateInstance().FromModel(x)));
            }

            if (payment.Transactions != null)
            {
                Transactions = new ObservableCollection <PaymentGatewayTransactionEntity>(payment.Transactions.Select(x => AbstractTypeFactory <PaymentGatewayTransactionEntity> .TryCreateInstance().FromModel(x, pkMap)));
            }

            if (payment.Status.IsNullOrEmpty())
            {
                Status = payment.PaymentStatus.ToString();
            }

            return(this);
        }
Esempio n. 22
0
        public virtual async Task SavePlansAsync(PaymentPlan[] plans)
        {
            var pkMap          = new PrimaryKeyResolvingMap();
            var changedEntries = new List <GenericChangedEntry <PaymentPlan> >();

            using (var repository = _subscriptionRepositoryFactory())
            {
                var existPlanEntities = await repository.GetPaymentPlansByIdsAsync(plans.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray());

                foreach (var paymentPlan in plans)
                {
                    var sourcePlanEntity = AbstractTypeFactory <PaymentPlanEntity> .TryCreateInstance();

                    if (sourcePlanEntity != null)
                    {
                        sourcePlanEntity = sourcePlanEntity.FromModel(paymentPlan, pkMap) as PaymentPlanEntity;
                        var targetPlanEntity = existPlanEntities.FirstOrDefault(x => x.Id == paymentPlan.Id);
                        if (targetPlanEntity != null)
                        {
                            changedEntries.Add(new GenericChangedEntry <PaymentPlan>(paymentPlan, targetPlanEntity.ToModel(AbstractTypeFactory <PaymentPlan> .TryCreateInstance()), EntryState.Modified));
                            sourcePlanEntity.Patch(targetPlanEntity);
                        }
                        else
                        {
                            repository.Add(sourcePlanEntity);
                            changedEntries.Add(new GenericChangedEntry <PaymentPlan>(paymentPlan, EntryState.Added));
                        }
                    }
                }

                //Raise domain events
                await _eventPublisher.Publish(new PaymentPlanChangingEvent(changedEntries));

                await repository.UnitOfWork.CommitAsync();

                pkMap.ResolvePrimaryKeys();

                ClearCacheFor(plans);

                await _eventPublisher.Publish(new PaymentPlanChangedEvent(changedEntries));
            }
        }
        public virtual async Task SaveChangesAsync(CatalogProduct[] products)
        {
            var pkMap          = new PrimaryKeyResolvingMap();
            var changedEntries = new List <GenericChangedEntry <CatalogProduct> >();

            await ValidateProductsAsync(products);

            using (var repository = _repositoryFactory())
            {
                var dbExistProducts = await repository.GetItemByIdsAsync(products.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray());

                foreach (var product in products)
                {
                    var modifiedEntity = AbstractTypeFactory <ItemEntity> .TryCreateInstance().FromModel(product, pkMap);

                    var originalEntity = dbExistProducts.FirstOrDefault(x => x.Id == product.Id);

                    if (originalEntity != null)
                    {
                        changedEntries.Add(new GenericChangedEntry <CatalogProduct>(product, originalEntity.ToModel(AbstractTypeFactory <CatalogProduct> .TryCreateInstance()), EntryState.Modified));
                        modifiedEntity.Patch(originalEntity);
                        //Force set ModifiedDate property to mark a product changed. Special for  partial update cases when product table not have changes
                        originalEntity.ModifiedDate = DateTime.UtcNow;
                    }
                    else
                    {
                        repository.Add(modifiedEntity);
                        changedEntries.Add(new GenericChangedEntry <CatalogProduct>(product, EntryState.Added));
                    }
                }

                await _eventPublisher.Publish(new ProductChangingEvent(changedEntries));

                await repository.UnitOfWork.CommitAsync();

                pkMap.ResolvePrimaryKeys();

                await _eventPublisher.Publish(new ProductChangedEvent(changedEntries));
            }

            ClearCache(products);
        }
Esempio n. 24
0
        public static CustomerOrderEntity ToDataModel(this CustomerOrder order, PrimaryKeyResolvingMap pkMap)
        {
            if (order == null)
            {
                throw new ArgumentNullException("order");
            }

            var retVal = new CustomerOrderEntity();

            pkMap.AddPair(order, retVal);
            retVal.InjectFrom(order);

            retVal.Currency = order.Currency.ToString();


            if (order.Addresses != null)
            {
                retVal.Addresses = new ObservableCollection <AddressEntity>(order.Addresses.Select(x => x.ToDataModel()));
            }
            if (order.Items != null)
            {
                retVal.Items = new ObservableCollection <LineItemEntity>(order.Items.Select(x => x.ToDataModel(pkMap)));
            }
            if (order.Shipments != null)
            {
                retVal.Shipments = new ObservableCollection <ShipmentEntity>(order.Shipments.Select(x => x.ToDataModel(retVal, pkMap)));
            }
            if (order.InPayments != null)
            {
                retVal.InPayments = new ObservableCollection <PaymentInEntity>(order.InPayments.Select(x => x.ToDataModel(retVal, pkMap)));
            }
            if (order.Discount != null)
            {
                retVal.Discounts = new ObservableCollection <DiscountEntity>(new DiscountEntity[] { order.Discount.ToDataModel() });
            }
            if (order.TaxDetails != null)
            {
                retVal.TaxDetails = new ObservableCollection <TaxDetailEntity>();
                retVal.TaxDetails.AddRange(order.TaxDetails.Select(x => x.ToDataModel()));
            }
            return(retVal);
        }
        protected virtual void SaveChanges(Category[] categories)
        {
            var pkMap          = new PrimaryKeyResolvingMap();
            var changedEntries = new List <GenericChangedEntry <Category> >();

            ValidateCategoryProperties(categories);

            using (var repository = _repositoryFactory())
                using (var changeTracker = GetChangeTracker(repository))
                {
                    var dbExistCategories = repository.GetCategoriesByIds(categories.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray(), CategoryResponseGroup.Full);
                    foreach (var category in categories)
                    {
                        var originalEntity = dbExistCategories.FirstOrDefault(x => x.Id == category.Id);
                        var modifiedEntity = AbstractTypeFactory <CategoryEntity> .TryCreateInstance().FromModel(category, pkMap);

                        if (originalEntity != null)
                        {
                            changeTracker.Attach(originalEntity);
                            changedEntries.Add(new GenericChangedEntry <Category>(category, originalEntity.ToModel(AbstractTypeFactory <Category> .TryCreateInstance()), EntryState.Modified));
                            modifiedEntity.Patch(originalEntity);
                            //Force set ModifiedDate property to mark a product changed. Special for  partial update cases when product table not have changes
                            originalEntity.ModifiedDate = DateTime.UtcNow;
                        }
                        else
                        {
                            repository.Add(modifiedEntity);
                            changedEntries.Add(new GenericChangedEntry <Category>(category, EntryState.Added));
                        }
                    }
                    _eventPublisher.Publish(new CategoryChangingEvent(changedEntries));

                    CommitChanges(repository);
                    pkMap.ResolvePrimaryKeys();
                    //Reset cached categories and catalogs
                    ResetCache();

                    _eventPublisher.Publish(new CategoryChangedEvent(changedEntries));
                }
            //Need add seo separately
            _commerceService.UpsertSeoForObjects(categories.OfType <ISeoSupport>().ToArray());
        }
Esempio n. 26
0
        protected virtual void SaveChanges(CatalogProduct[] products, bool disableValidation = false)
        {
            var pkMap = new PrimaryKeyResolvingMap();

            ValidateProducts(products);

            using (var repository = _repositoryFactory())
                using (var changeTracker = GetChangeTracker(repository))
                {
                    //Optimize performance and CPU usage
                    repository.DisableChangesTracking();

                    var dbExistProducts = repository.GetItemByIds(products.Where(x => !x.IsTransient()).Select(x => x.Id).ToArray(), ItemResponseGroup.ItemLarge);
                    foreach (var product in products)
                    {
                        var modifiedEntity = AbstractTypeFactory <ItemEntity> .TryCreateInstance().FromModel(product, pkMap);

                        var originalEntity = dbExistProducts.FirstOrDefault(x => x.Id == product.Id);

                        if (originalEntity != null)
                        {
                            changeTracker.Attach(originalEntity);
                            modifiedEntity.Patch(originalEntity);
                            //Force set ModifiedDate property to mark a product changed. Special for  partial update cases when product table not have changes
                            originalEntity.ModifiedDate = DateTime.UtcNow;
                        }
                        else
                        {
                            repository.Add(modifiedEntity);
                        }
                    }

                    ((System.Data.Entity.DbContext)repository).ChangeTracker.DetectChanges();
                    CommitChanges(repository);
                    pkMap.ResolvePrimaryKeys();
                }

            //Update SEO
            var productsWithVariations = products.Concat(products.Where(x => x.Variations != null).SelectMany(x => x.Variations)).OfType <ISeoSupport>().ToArray();

            _commerceService.UpsertSeoForObjects(productsWithVariations);
        }
Esempio n. 27
0
        public virtual DynamicPropertyEntity FromModel(DynamicProperty dynamicProp, PrimaryKeyResolvingMap pkMap)
        {
            if (dynamicProp == null)
            {
                throw new ArgumentNullException(nameof(dynamicProp));
            }

            pkMap.AddPair(dynamicProp, this);

            Id             = dynamicProp.Id;
            CreatedBy      = dynamicProp.CreatedBy;
            CreatedDate    = dynamicProp.CreatedDate;
            ModifiedBy     = dynamicProp.ModifiedBy;
            ModifiedDate   = dynamicProp.ModifiedDate;
            Description    = dynamicProp.Description;
            DisplayOrder   = dynamicProp.DisplayOrder;
            IsArray        = dynamicProp.IsArray;
            IsDictionary   = dynamicProp.IsDictionary;
            IsMultilingual = dynamicProp.IsMultilingual;
            IsRequired     = dynamicProp.IsRequired;
            Name           = dynamicProp.Name;
            ObjectType     = dynamicProp.ObjectType;

            ValueType = dynamicProp.ValueType.ToString();
            if (dynamicProp.DisplayNames != null)
            {
                DisplayNames = new ObservableCollection <DynamicPropertyNameEntity>(dynamicProp.DisplayNames.Select(x => AbstractTypeFactory <DynamicPropertyNameEntity> .TryCreateInstance().FromModel(x)));
            }

            if (dynamicProp is DynamicObjectProperty dynamicObjectProp && dynamicObjectProp.Values != null)
            {
                //Force set these properties from owned property object
                foreach (var value in dynamicObjectProp.Values)
                {
                    value.ObjectId   = dynamicObjectProp.ObjectId;
                    value.ObjectType = dynamicObjectProp.ObjectType;
                    value.ValueType  = dynamicObjectProp.ValueType;
                }
                //ObjectValues = new ObservableCollection<DynamicPropertyObjectValueEntity>(dynamicObjectProp.Values.Select(x => AbstractTypeFactory<DynamicPropertyObjectValueEntity>.TryCreateInstance().FromModel(x)));
            }
            return(this);
        }
        public override MemberEntity FromModel(Member member, PrimaryKeyResolvingMap pkMap)
        {
            var contact = member as Contact;

            if (contact != null)
            {
                FirstName              = contact.FirstName;
                MiddleName             = contact.MiddleName;
                LastName               = contact.LastName;
                BirthDate              = contact.BirthDate;
                DefaultLanguage        = contact.DefaultLanguage;
                FullName               = contact.FullName;
                Salutation             = contact.Salutation;
                TimeZone               = contact.TimeZone;
                TaxpayerId             = contact.TaxPayerId;
                PreferredCommunication = contact.PreferredCommunication;
                PreferredDelivery      = contact.PreferredDelivery;
                PhotoUrl               = contact.PhotoUrl;

                if (string.IsNullOrEmpty(Name))
                {
                    Name = contact.FullName;
                }

                if (contact.Organizations != null)
                {
                    MemberRelations = new ObservableCollection <MemberRelationEntity>();
                    foreach (var organization in contact.Organizations)
                    {
                        var memberRelation = new MemberRelationEntity
                        {
                            AncestorId       = organization,
                            AncestorSequence = 1,
                            DescendantId     = Id,
                        };
                        MemberRelations.Add(memberRelation);
                    }
                }
            }
            //Call base converter
            return(base.FromModel(member, pkMap));
        }
        public static PaymentEntity ToDataModel(this Payment payment, PrimaryKeyResolvingMap pkMap)
        {
            if (payment == null)
            {
                throw new ArgumentNullException("payment");
            }

            var retVal = new PaymentEntity();

            pkMap.AddPair(payment, retVal);
            retVal.InjectFrom(payment);

            retVal.Currency = payment.Currency.ToString();

            if (payment.BillingAddress != null)
            {
                retVal.Addresses = new ObservableCollection <AddressEntity>(new AddressEntity[] { payment.BillingAddress.ToDataModel() });
            }
            return(retVal);
        }
        public virtual PaymentPlanEntity FromModel(PaymentPlan paymentPlan, PrimaryKeyResolvingMap pkMap)
        {
            if (paymentPlan == null)
            {
                throw new ArgumentNullException(nameof(paymentPlan));
            }

            pkMap.AddPair(paymentPlan, this);

            Id              = paymentPlan.Id;
            CreatedBy       = paymentPlan.CreatedBy;
            CreatedDate     = paymentPlan.CreatedDate;
            ModifiedBy      = paymentPlan.ModifiedBy;
            ModifiedDate    = paymentPlan.ModifiedDate;
            IntervalCount   = paymentPlan.IntervalCount;
            TrialPeriodDays = paymentPlan.TrialPeriodDays;
            Interval        = paymentPlan.Interval.ToString();

            return(this);
        }