Example #1
0
        /// <summary>
        /// Constructor that creates a license based on a provided SKU 
        /// </summary>
        /// <param name="licensedSku">SKU this license is based on</param>
        /// <param name="owner">Owning customer</param>
        /// <param name="purchaser">Purchasing customer</param>
        public License(SKU licensedSku, Customer owner, Customer purchaser)
        {
            this.SkuId = licensedSku.SkuId;
            this.LicenseIssued = DateTime.Now;
            this.PurchasingCustomerId = purchaser.ObjectId;
            this.OwningCustomerId = owner.ObjectId;
            this.OwnerName = owner.Name;

            if (licensedSku.LicenseDuration.HasValue)
            {
                this.LicenseExpires = DateTime.Now.AddMonths(licensedSku.LicenseDuration.Value);
            }
        }
Example #2
0
        public void ExecuteCheckout(Customer purchasingCustomer, Customer owningCustomer)
        {
            var currentUser = context.GetUser(HttpContext.Current.User.Identity);

            //Add PurchasingCustomer if none existing
            if (purchasingCustomer.ObjectId == new Guid())
            {
                context.Customers.Add(purchasingCustomer);
                context.SaveChanges();
                if (!currentUser.IsVendorAdmin)
                {
                    context.UserCustomerRights.Add(new UserCustomerRight
                    {
                        RightObject = purchasingCustomer,
                        RightId = EditEntityMembers.Id,
                        UserId = currentUser.UserId
                    });
                    context.SaveChanges();
                }
            }

            //Add OwningCustomer if none existing
            if (owningCustomer != purchasingCustomer)
            {
                if (owningCustomer.ObjectId == new Guid())
                {
                    context.Customers.Add(owningCustomer);
                    context.SaveChanges();
                    if (!currentUser.IsVendorAdmin)
                    {
                        context.UserCustomerRights.Add(new UserCustomerRight
                        {
                            RightObject = owningCustomer,
                            RightId = EditEntityInfo.Id,
                            UserId = currentUser.UserId
                        });
                        context.SaveChanges();
                    }
                }
            }

            //Create licenses for every transactionitem
            foreach (var item in Transaction.TransactionItems)
            {
                if (item.License == null)
                {
                    var newLicense = new Model.License(item.Sku, owningCustomer, purchasingCustomer);
                    context.Licenses.Add(newLicense);

                    item.License = newLicense;
                }
            }
            context.SaveChanges();

            var existingCustomerApps = (from x in context.Licenses
                join y in context.LicenseCustomerApps on x.ObjectId equals y.LicenseId
                where x.OwningCustomerId == owningCustomer.ObjectId
                select y.CustomerApp).ToList();

            //Add to any existing apps
            if (existingCustomerApps.Any())
            {
                foreach (var customerApp in existingCustomerApps)
                {
                    customerApp.AddLicenses((from x in Transaction.TransactionItems select x.License.ObjectId));
                }
                context.SaveChanges();
            }
            else
            {
                //Create default application containing all licenses
                var newCustomerApp = new CustomerApp()
                {
                    ApplicationName = owningCustomer.Name + "_Application"
                };
                context.CustomerApps.Add(newCustomerApp);
                newCustomerApp.AddLicenses((from x in Transaction.TransactionItems select x.License.ObjectId));
                newCustomerApp.CustomerAppKeys.Add(new CustomerAppKey());
            }
            Transaction.Status = TransactionStatus.Complete;
            context.SaveChanges();
        }