private ProductDefinition BuildProductDefinitionWithEachAttributeTypes() { var productDefinition = new ProductDefinition { Name = "productDefinition1", PropertyGroups = new List <ProductPropertyDefinitionGroup> { new ProductPropertyDefinitionGroup { Name = "group1", DisplayName = new LocalizedString(new Dictionary <string, string> { { "en-US", "group 1" } }), Properties = new List <ProductPropertyDefinition> { BuildAttributeDefinition("attr Text", "attrText", PropertyDataType.Text), BuildAttributeDefinition("attr Boolean", "attrBoolean", PropertyDataType.Boolean), BuildAttributeDefinition("attr Currency", "attrCurrency", PropertyDataType.Currency), BuildAttributeDefinition("attr Datetime", "attrDatetime", PropertyDataType.DateTime), BuildAttributeDefinition("attr Decimal", "attrDecimal", PropertyDataType.Decimal), BuildAttributeDefinition("attr Number", "attrNumber", PropertyDataType.Number), } } } }; return(productDefinition); }
private Product CreateBaseProduct(ProductDefinition productDefinition, string sku, string variantSku, string name, string imageId) { if (sku.Length > 30) { sku = sku.Substring(0, 30); } if (!String.IsNullOrWhiteSpace(variantSku) && variantSku.Length > 30) { variantSku = variantSku.Substring(0, 30); } var product = Product.SingleOrDefault(p => p.Sku == sku && p.VariantSku == variantSku) ?? new Product(); product.Sku = sku; product.VariantSku = variantSku; product.Name = name; product.ProductDefinition = productDefinition; product.DisplayOnSite = true; product.PrimaryImageMediaId = imageId; product.ThumbnailImageMediaId = imageId; product.Save(); return(product); }
public void DeleteProduct(Quantumart.QP8.BLL.Article product, ProductDefinition definition, bool doNotSendNotifications, bool checkRootArticlePermissions, string[] channels) { Dictionary <int, Product <DeletingMode> > dictionary; Article[] products; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress)) { dictionary = DoWithLogging( () => GetProductsToBeProcessed(product, definition, ef => ef.DeletingMode, DeletingMode.Delete, false), "Receiving articles to be deleted for product {id}", product.Id ); products = doNotSendNotifications ? null : Productservice.GetSimpleProductsByIds(new[] { product.Id }); } DeleteProducts(dictionary, product.Id, checkRootArticlePermissions); if (!doNotSendNotifications) { using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress)) { SendNotification(products, product.Id, channels); } } }
private static async Task <List <Lookup> > GetLookups(ProductDefinition productDef, IOvertureClient client) { var kvaLookupAttributes = productDef.VariantProperties .Where(vp => vp.IsKeyVariant && vp.DataType == PropertyDataType.Lookup) .Select(vp => vp.LookupDefinition.LookupName); var lookupTasks = new Dictionary <string, Task <Lookup> >(); foreach (var name in kvaLookupAttributes) { if (lookupTasks.ContainsKey(name)) { continue; } var request = new GetProductLookupRequest { LookupName = name }; lookupTasks.Add(name, client.SendAsync(request)); } var lookupResults = await Task.WhenAll(lookupTasks.Values).ConfigureAwait(false); return(lookupResults.Where(x => x != null).ToList()); }
public ActionResult RemovePartialProduct( [FromBody] RemovePartialProductRequest request, bool isLive = false) { if (!ModelState.IsValid) { return BadRequest(); } Content rootContent = _contentDefinitionService .GetDefinitionById(request.ProductDefinitionId, isLive); Content partialContent = _editorPartialContentService .FindContentByPath(rootContent, request.ContentPath); var productDefinition = new ProductDefinition { StorageSchema = partialContent }; var qpArticle = _articleService.Read(request.RemoveArticleId); if (qpArticle != null) { _deleteAction.DeleteProduct(qpArticle, productDefinition); } return NoContent(); }
private void AddCustomDefinitionFields(ProductDefinition definition, ProductTypeViewModel sfProductType) { var dataType = _session.Query <DataType>().FirstOrDefault(x => x.TypeName == "ShortText"); if (sfProductType.ProductAttributes == null) { Log.Info($"No product attributes found to associate to product definition '{sfProductType.Title}'"); return; } foreach (var attribute in sfProductType.ProductAttributes) { Log.Info( $"Adding attribute/definition field '{attribute.Title}' to product definition '{definition.Name}'"); var definitionField = new ProductDefinitionField() { Multilingual = true, DisplayOnSite = attribute.Visible, Deleted = false, RenderInEditor = true, IsVariantProperty = true, SortOrder = 0, Name = attribute.Title.Trim(), DataType = dataType }; definition.AddProductDefinitionField(definitionField); } }
private static async Task <List <Lookup> > GetLookups(ProductDefinition productDef, IOvertureClient client) { var kvaLookupAttributes = productDef.VariantProperties.Where(vp => vp.IsKeyVariant && vp.DataType == PropertyDataType.Lookup) .Select(vp => vp.LookupDefinition.LookupName); var results = new List <Lookup>(); var lookupTasks = new List <Task <Lookup> >(); foreach (var name in kvaLookupAttributes.Distinct()) { var request = new GetProductLookupRequest { LookupName = name }; lookupTasks.Add(client.SendAsync(request)); } var lookupResults = await Task.WhenAll(lookupTasks).ConfigureAwait(false); foreach (var lookup in lookupResults) { if (lookup != null) { results.Add(lookup); } } return(results); }
public TemplateItem BuildProductTemplateFromDefinition(ProductDefinition definition) { var builder = new TemplateBuilder(); ID templateId = definition.SitecoreVariantTemplateId(); builder.CreateTemplate(definition.Name + " Variant", templateId, definition.Name + " Variant", definition.GetSitecoreBaseVariantTemplateIds()); _productDefinitionIdToTemplateIdMap[definition.ProductDefinitionId] = templateId; var combinedFields = definition.ProductDefinitionFields.Where(x => x.IsVariantProperty && !x.Deleted && !x.DataType.Deleted).ToList(); if (combinedFields.Any()) { ID sectionId = definition.SitecoreTemplateSectionDynamicDefinitionsForVariant(templateId); var resourceManager = ObjectFactory.Instance.Resolve <IResourceManager>(); var userService = ObjectFactory.Instance.Resolve <IUserService>(); builder.CreateSection(resourceManager.GetLocalizedText(userService.GetCurrentUserCulture(), "Tabs", "DynamicFields"), sectionId, 150); int sortOrder = 10; foreach (var definitionField in combinedFields.Where(x => x.RenderInEditor)) { CreateDynamicItemField(builder, definitionField, sortOrder, sectionId); sortOrder += 10; } } var template = builder.Build(); template.AddToFieldList(FieldIDs.Icon, SitecoreConstants.UCommerceIconFolder + "/ui/map.png"); template.SetRevision(definition.Guid.Derived(definition.ModifiedOn)); return(template); }
private ProductDefinitionField CreateFiield(PropertyInfo propertyInfo, ProductDefinition definition) { var fieldAttribute = propertyInfo.AssertGetAttribute<ProductFieldAttribute>(); var fieldName = fieldAttribute.Name.IsNotEmpty() ? fieldAttribute.Name : propertyInfo.Name; var field = definition.ProductDefinitionFields .EmptyIfNull() .SingleOrDefault(x => x.Name == fieldName); if (field == null) { var dataType = _session.QueryOver<DataType>() .Where(x => x.TypeName == fieldAttribute.DataType) .SingleOrDefault(); field = new ProductDefinitionField { Name = fieldName, DataType = dataType }; definition.AddProductDefinitionField(field); } field.DisplayOnSite = fieldAttribute.DisplayOnSite; field.Multilingual = fieldAttribute.Multilingual; field.RenderInEditor = fieldAttribute.RenderInEditor; field.Searchable = fieldAttribute.Searchable; field.SortOrder = fieldAttribute.SortOrder; field.Facet = fieldAttribute.Facet; field.IsVariantProperty = fieldAttribute.IsVariantProperty; return field; }
public void FinishTransaction(ProductDefinition product, string transactionId) { // Kongregate recommends consuming purchases on the server instead of the // client, so there's no client-side logic for finishing purchases by default. // // TODO: Optionally allow the client to consume items after a purchase. }
private void AddProductDefinitionFieldIfDoesntExist(ProductDefinition definition, string name, string typeName, bool displayOnWebsite, bool variantProperty, bool promotoToFacet, string displayName) { if (definition.GetDefinitionFields().Any(f => f.Name == name)) { return; } var field = ProductDefinitionField.SingleOrDefault(f => f.Name == name && f.ProductDefinition.ProductDefinitionId == definition.ProductDefinitionId) ?? new ProductDefinitionFieldFactory().NewWithDefaults(name); field.Name = name; field.DataType = DataType.SingleOrDefault(d => d.TypeName == typeName); field.Deleted = false; field.Multilingual = false; field.DisplayOnSite = displayOnWebsite; field.IsVariantProperty = variantProperty; field.RenderInEditor = true; field.Facet = promotoToFacet; definition.AddProductDefinitionField(field); definition.Save(); }
private void AddProductDefinitionFieldIfDoesntExist(ProductDefinition definition, string name, string typeName, bool displayOnWebsite, bool variantProperty, bool promotoToFacet, string displayName) { if (definition.GetDefinitionFields().Any(f => f.Name == name)) { return; } var field = ProductDefinitionField.SingleOrDefault(f => f.Name == name && f.ProductDefinition.ProductDefinitionId == definition.ProductDefinitionId) ?? new ProductDefinitionFieldFactory().NewWithDefaults(name); field.Name = name; field.DataType = DataType.SingleOrDefault(d => d.TypeName == typeName); field.Deleted = false; field.Multilingual = false; field.DisplayOnSite = displayOnWebsite; field.IsVariantProperty = variantProperty; field.RenderInEditor = true; field.Facet = promotoToFacet; //Helpers.DoForEachCulture(language => // { // if (field.GetDescription(language) == null) // field.AddProductDefinitionFieldDescription(new ProductDefinitionFieldDescription { CultureCode = language, DisplayName = displayName, Description = displayName }); // }); definition.AddProductDefinitionField(field); definition.Save(); }
public void OnPurchaseSucceeded(IOSStoreKitResult item) { switch (item.State) { case InAppPurchaseState.Deferred: return; case InAppPurchaseState.Restored: ProductDefinition definition = definitions.FirstOrDefault(x => x.storeSpecificId == item.ProductIdentifier); if (definition == null || definition.type == ProductType.Subscription || DBManager.isPurchased(definition.id)) { return; } break; case InAppPurchaseState.Failed: OnPurchaseFailed(item.Error.Message, item.Error.Code); return; } string transactionId = item.TransactionIdentifier; #if UNITY_EDITOR //allow for multiple test purchases with unique transactions transactionId = (System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds.ToString(); #endif callback.OnPurchaseSucceeded(item.ProductIdentifier, item.Receipt, transactionId); }
/// <summary> /// Called by Unity Purchasing when a transaction has been recorded. /// Store systems should perform any housekeeping here, such as closing transactions or consuming consumables. /// </summary> public virtual void FinishTransaction(ProductDefinition product, string transactionId) { //IN THE CURRENT VERSION: nothing to do here! //consumables are consumed automatically on PlayFab's side after 5 seconds. /* * //do not consume non-consumable products * if (string.IsNullOrEmpty(transactionId) || product.type != ProductType.Consumable) * return; */ /* * //but also do not consume virtual products (power-ups etc.) automatically, * //if they are not set to be consumed instantly (i.e. their usage count is above zero) * IAPObject obj = IAPManager.GetIAPObject(product.id); * if(obj.editorType != IAPType.Currency && obj.usageCount > 0) * return; */ /* * ConsumeItemRequest request = new ConsumeItemRequest() * { * ItemInstanceId = transactionId, * ConsumeCount = 1 * }; * * PlayFabClientAPI.ConsumeItem(request, OnTransactionFinished, OnPurchaseFailed); */ }
private Product CreateProductOnCategory(Category category, ProductDefinition productDefinition, string sku, string name, decimal price, string shortDescription = "", string longDescription = "") { var product = CreateBaseProduct(productDefinition, sku, null, name); GenericHelpers.DoForEachCulture( language => { if (!product.HasDescription(language)) { product.AddProductDescription(new ProductDescription() { CultureCode = language, DisplayName = name, ShortDescription = shortDescription, LongDescription = longDescription }); } }); CreateProductPricesForProduct(category, price, product); // Ucommerce checks whether the product already exists in the create // when creating the new relation. product.AddCategory(category, 0); product.Save(); return(product); }
/// <summary> /// Gets the <see cref="ProductDefinition"/> associated with the given Unity product Id. /// </summary> /// <returns>true if the inventory contains requested Unity product Id; otherwise, false.</returns> public bool GetUnityProductDefinition(string unityProductId, out ProductDefinition unityProduct) { lock (_inventoryLock) { return(_catalog.TryGetValue(unityProductId, out unityProduct)); } }
public PipelineExecutionResult Execute(InstallationPipelineArgs subject) { var sharedFieldRepository = ObjectFactory.Instance.Resolve <IRepository <SharedField> >(); var sharedFieldsToSave = new List <SharedField>(); var productDefinitions = ProductDefinition.All().ToList(); var categoryDefinitions = Definition.All().Where(x => x.DefinitionType == DefinitionType.Get(1)).ToList(); foreach (var productDefinition in productDefinitions) { sharedFieldsToSave.Add(new SharedField() { FieldValue = GetXmlLayoutValueForProduct(), FieldId = FieldIDs.LayoutField.Guid, ItemId = productDefinition.Guid.Derived("__Standard Values") // This must be set on the Standard Values item. Not the template item directly. }); } foreach (var categoryDefinition in categoryDefinitions) { sharedFieldsToSave.Add(new SharedField() { FieldValue = GetXmlLayoutValueForCategory(), FieldId = FieldIDs.LayoutField.Guid, ItemId = categoryDefinition.Guid.Derived("__Standard Values") // This must be set on the Standard Values item. Not the template item directly. }); } sharedFieldRepository.Save(sharedFieldsToSave); return(PipelineExecutionResult.Success); }
private static IDefinitionField GetDefinitionField(FieldChange fieldChange, Product product) { var definition = ProductDefinition.SingleOrDefault(x => x.Name == product.ProductDefinition.Name); var definitionField = definition.GetDefinitionFields().SingleOrDefault(x => x.Name == fieldChange.Definition.Name); return(definitionField); }
private static void UpdateDefinition(Article product, ProductDefinition definition, Dictionary <string, string> actionParameters) { string fieldIdString; if (actionParameters.TryGetValue(FieldIdParameterKey, out fieldIdString)) { int fieldId = int.Parse(fieldIdString); var articleDefinition = definition.StorageSchema.Fields.OfType <Association>().FirstOrDefault(f => f.FieldId == fieldId); if (articleDefinition != null) { string articleIdString; if (actionParameters.TryGetValue(ArticleIdParameterKey, out articleIdString)) { articleDefinition.CloningMode = CloningMode.UseExisting; int articleId = int.Parse(articleIdString); product.FieldValues.Find(fv => fv.Field.Id == fieldId).Value = articleId.ToString(); } else { articleDefinition.CloningMode = CloningMode.Ignore; } } } }
public TemplateItem BuildProductTemplateFromDefinition(ProductDefinition definition) { var builder = new TemplateBuilder(); ID templateId = definition.SitecoreTemplateId(); builder.CreateTemplate(definition.Name, templateId, definition.Name, definition.GetSitecoreBaseTemplateIds()); _productDefinitionIdToTemplateIdMap[definition.ProductDefinitionId] = templateId; var definitionFields = definition.ProductDefinitionFields.Where(x => x.RenderInEditor && !x.Deleted && !x.IsVariantProperty).ToList(); if (definitionFields.Any()) { ID sectionId = definition.SitecoreTemplateSectionDynamicDefinitions(templateId); var resourceManager = ObjectFactory.Instance.Resolve <IResourceManager>(); var userService = ObjectFactory.Instance.Resolve <IUserService>(); builder.CreateSection(resourceManager.GetLocalizedText(userService.GetCurrentUserCulture(), "Tabs", "DynamicFields"), sectionId, 150); int sortOrder = 10; foreach (var definitionField in definitionFields) { CreateDynamicItemField(builder, definitionField, sortOrder, sectionId); sortOrder += 10; } } var templateItem = builder.Build(); templateItem.AddToFieldList(FieldIDs.Icon, _iconFolder + "/ui/map.png"); return(templateItem); }
public void ProductDefinitionSaved(ProductDefinition definition) { foreach (var provider in _providers) { provider.ProductDefinitionSaved(definition); } }
void IStore.Purchase(ProductDefinition product, string developerPayload) { if (!productsByID.ContainsKey(product.storeSpecificId)) { storeEvents.OnPurchaseFailed(new PurchaseFailureDescription(product.id, PurchaseFailureReason.ProductUnavailable, "UnknownProduct")); return; } var productInfo = productsByID[product.storeSpecificId]; PurchaseIntentReq purchaseIntentReq = new PurchaseIntentReq { PriceType = productInfo.PriceType, ProductId = productInfo.ProductId, DeveloperPayload = developerPayload }; var task = iapClient.CreatePurchaseIntent(purchaseIntentReq) .AddOnSuccessListener((intentResult) => { PurchaseInitentCreated(intentResult, product); }) .AddOnFailureListener((exception) => { storeEvents.OnPurchaseFailed(new PurchaseFailureDescription(product.id, PurchaseFailureReason.Unknown, exception.Message)); }); }
public Article GetProductById(int id, bool isLive = false, ProductDefinition productDefinition = null) { var token = CallMethod("GetProductById", "id = {0}, isLive = {1}", id, isLive); var result = _productService.GetProductById(id, isLive, productDefinition); EndMethod(token, result); return(result); }
private void CreateTies(Category accessories, ProductDefinition accessoryDefinition) { var ties = CreateChildCategory(accessories, "Ties"); CreateProductOnCategory(ties, accessoryDefinition, "19849", "Paul Smith Accessories Classic Blue with Brown & Pink Stripe Silk Woven Tie", 69.50M, "", "<ul><li>Classic Stripe Tie</li><li>Tie length : 140cm</li><li>Blade width : 9cm </li><li>Blue with brown and pink stripes</li><li>100% silk (Made in Italy)</li><li>Style Number : AGXA/764L/R38/VP</li></ul><p>As featured on <a href=\"http://www.pritchards.co.uk/accessories-14/ties-25/paul-smith-accessories-classic-blue-with-19849.htm\">Pritchards.co.uk</a></p>"); CreateProductOnCategory(ties, accessoryDefinition, "19324", "Hugo Boss Black Dark Red Ultra Slim Knitted Tie", 65, "", "<ul><li>Ultra slim knitted tie</li><li>Length: 145 cm </li><li> Width: 5 cm</li><li>Squared end</li><li>100% High-quality wool</li><li>Style Number : 5023476 10156986 01 504</li></ul><p>As featured on <a href=\"http://www.pritchards.co.uk/accessories-14/ties-25/hugo-boss-black-burgundy-ultra-slim-19324.htm\">Pritchards.co.uk</a></p>"); CreateProductOnCategory(ties, accessoryDefinition, "20301", "Hugo Boss Black Pink & White Flower Pattern Silk Woven Tie", 65, "Silky soft tie from Hugo Boss", "<ul><li>Flower Pattern Silk Tie</li><li>Tie Length : 145cm</li><li>Blade Width : 7.5cm</li><li>Black With Pink & White Flowers</li><li>100% Silk (Made in Italy)</li><li>Style Number : 50227733 10156957 01 001</li></ul><p>As featured on <a href=\"http://www.pritchards.co.uk/accessories-14/ties-25/hugo-boss-black-pink-white-flower-20301.htm\">Pritchards.co.uk</a></p>"); }
private void CreateScarves(Category accessories, ProductDefinition accessoryDefinition) { var scarves = CreateChildCategory(accessories, "Scarves"); CreateProductOnCategory(scarves, accessoryDefinition, "LBAS", "Luxury Baby Alpaca Scarf", 99, "", "<ul><li>100% Baby Alpaca Wool</li><li>180cm x 130cm (plus tassel fringe)</li><li>Fair Trade</li><li>Hypo-allergenic</li></ul><p>As featured on <a href=\"http://www.amazon.co.uk/Luxury-Threads-100%25-Alpaca-Throw/dp/B008WMLGCO/ref=sr_1_5?s=kitchen&ie=UTF8&qid=1349966612&sr=1-5\">Luxury Threads</a></p>"); CreateProductOnCategory(scarves, accessoryDefinition, "20178", "Hugo Boss Black Frando Multi Colour Square Check Pattern Wool Scarf", 55, "", "<ul><li>Embroidered Hugo Boss Logo</li><li>Tassled Ends</li><li>Size 180 cm x 29 cm (including tassels)</li><li>Multi Colour Square Check Pattern</li><li>100% Virgin Wool</li><li>Style Number : 50230552 10159101 01 641</li></ul><p>As featured on <a href=\"http://www.pritchards.co.uk/accessories-14/scarves-32/hugo-boss-black-frando-multi-colour-20178.htm\">Pritchards.co.uk</a></p>"); CreateProductOnCategory(scarves, accessoryDefinition, "20180", "Hugo Boss Black Farion Multi Colour Stripe ", 55, "", "<ul><li>Embroidered Hugo Boss logo</li><li>Tasselled ends</li><li>Size 180 cm x 25 cm (including tassels)</li><li>Multi Colour Stripe</li><li>100% Knitted Wool</li><li>Style Number : 50226493 10157685 01 960</li></ul><p>As featured on <a href=\"http://www.pritchards.co.uk/accessories-14/scarves-32/hugo-boss-black-farion-multi-colour-20180.htm\">Pritchards.co.uk</a></p>"); }
public void DeleteProduct(Quantumart.QP8.BLL.Article product, ProductDefinition definition) { using (var transaction = CreateTransaction()) { DeleteProduct(product, definition, true, false, null); transaction.Commit(); } }
public string GetCommaSeperatedProductVariantTemplatesList() { var productDefinitions = ProductDefinition.All().Select(x => x.Name).ToList(); return(productDefinitions.Any() ? productDefinitions.Aggregate((x, y) => x + " Variant," + y + " Variant") : ""); }
public void UpdateSubscription( Product oldProduct, Product newProduct, GooglePlayStoreProrationMode prorationMode) { if (!IsGooglePlayInAppBillingServiceAvailable()) { return; } Purchase oldPurchase; if (!_inventory.GetPurchase(oldProduct.definition, out oldPurchase)) { _billingUtil.LogErrorFormat( "Cannot find the subscription purchase record to be updated: {0}", oldProduct.definition.storeSpecificId); return; } if (_productInPurchaseFlow != null) { _billingUtil.RunOnMainThread(() => _callback.OnPurchaseFailed( new PurchaseFailureDescription(newProduct.definition.id, PurchaseFailureReason.ExistingPurchasePending, string.Format("A purchase for {0} is already in progress.", _productInPurchaseFlow.id)))); return; } _productInPurchaseFlow = newProduct.definition; using (var billingFlowParamBuilder = new AndroidJavaObject(Constants.BillingFlowParamsBuilder)) { SkuDetails skuDetails; if (!_inventory.GetSkuDetails(newProduct.definition.storeSpecificId, out skuDetails)) { // A SKU that has ProductDefinition should appear in the inventory. If not, the issue could be // transient so that it asks to try again later. _callback.OnPurchaseFailed( new PurchaseFailureDescription(newProduct.definition.id, PurchaseFailureReason.ProductUnavailable, string.Format("Cannot update subscription for {0} now, please try again later.", _productInPurchaseFlow.id))); return; } billingFlowParamBuilder.Call <AndroidJavaObject>( Constants.BillingFlowParamsBuilderSetSkuDetailsMethod, skuDetails.ToJava()); billingFlowParamBuilder.Call <AndroidJavaObject>( Constants.BillingFlowParamsBuilderSetOldSkuMethod, oldPurchase.ProductId, oldPurchase.PurchaseToken); billingFlowParamBuilder.Call <AndroidJavaObject>( Constants.BillingFlowParamsBuilderSetReplaceSkusProrationModeMethod, (int)prorationMode); LaunchBillingFlow(billingFlowParamBuilder); } }
public void AcknowledgePurchase(string purchaseToken, ProductDefinition product, GooglePurchase googlePurchase, Action <ProductDefinition, GooglePurchase, IGoogleBillingResult> onAcknowledge) { AndroidJavaObject acknowledgePurchaseParams = GetAcknowledgePurchaseParamsClass().CallStatic <AndroidJavaObject>("newBuilder"); acknowledgePurchaseParams = acknowledgePurchaseParams.Call <AndroidJavaObject>("setPurchaseToken", purchaseToken); acknowledgePurchaseParams = acknowledgePurchaseParams.Call <AndroidJavaObject>("build"); m_BillingClient.Call("acknowledgePurchase", acknowledgePurchaseParams, new GoogleAcknowledgePurchaseListener(product, googlePurchase, onAcknowledge)); }
public void Purchase(ProductDefinition product, string developerPayload) { // Keep track of non consumables. if (product.type != ProductType.Consumable) { m_PurchasedProducts.Add(product.storeSpecificId); } m_Biller.OnPurchaseSucceeded(product.storeSpecificId, "{ \"this\" : \"is a fake receipt\" }", Guid.NewGuid().ToString()); }
/// <summary> /// Called by Unity Purchasing when a transaction has been recorded. /// Store systems should perform any housekeeping here, such as closing transactions or consuming consumables. /// </summary> public virtual void FinishTransaction(ProductDefinition product, string transactionId) { if (product.type != ProductType.Consumable) { return; } AndroidInAppPurchaseManager.Client.Consume(product.storeSpecificId); }
private static ProductDefinition CreateProductDefinition(string name) { var productDefinition = ProductDefinition.SingleOrDefault(d => d.Name == name) ?? new ProductDefinition(); productDefinition.Name = name; productDefinition.Save(); return(productDefinition); }
public void TestFindProduct() { ProductDefinition product = new ProductDefinition { Id = "SomeId" }; this.productList.Add(product); Assert.AreEqual(product, this.productList[product.Id]); }
public void TestInitialize() { JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Formatting = Formatting.None, Converters = new JsonConverter[] { new JsonKnownTypeConverter() } }; string jsonProduct = AssemblyResourceReader.ReadAsString("Test_Data.Metadata.json"); this.Product = JsonConvert.DeserializeObject<ProductDefinition>(jsonProduct); }
void Start() { m_products = new ProductDefinition[productInfos.Length]; for (int i = 0; i < productInfos.Length; i++) { #if UNITY_IOS m_products[i] = new ProductDefinition(productInfos[i].GlobalId, productInfos[i].AppleId, productInfos[i].type); #elif UNITY_ANDROID m_products[i] = new ProductDefinition(productInfos[i].GlobalId, productInfos[i].AndroidId, productInfos[i].type); #endif } RequestBillingProducts(); }
public List<QATestDefinition> GenerateTestQATestDefinitionList(ProductDefinition product, int numberOfTests) { var masterTestList = new List<QATestDefinition>(); for (int i = 1; i <= numberOfTests; i++) { masterTestList.Add(new QATestDefinition(Guid.NewGuid(), product.Id, product.Name + " Test " + i, "This is Test Number " + i + " for the " + product.Name + " Product.")); } return masterTestList; }
public void BeforeActiveDate() { ProductDefinition p = new ProductDefinition { ActiveDate = DateTime.Now.AddMinutes(2) }; Assert.IsFalse(p.IsActive); }
public void Null() { ProductDefinition p = new ProductDefinition { ActiveDate = null }; Assert.IsTrue(p.IsActive); }
public void Save(ProductDefinition product) { _productDefinitions.Value.Save(product); }
public void RemoveDefinitionFields(ProductDefinition product, params string[] names) { foreach (var name in names) { try { ProductDefinitionField toBeRemoved = _productDefinitionFields.Value.SingleOrDefault(x => x.Name == name && x.ProductDefinition == product && !x.Deleted); if (toBeRemoved != null) product.ProductDefinitionFields.Remove(toBeRemoved); } catch (Exception ex) { string message = string.Format("'{0}' product definition field doesn't exist.", name); throw new InvalidOperationException(message, ex); } } }
public ProductDefinition ProductDefinition(string name, string description) { var productDefinition = _productDefinitions.Value.SingleOrDefault(x => x.Name == name); if (productDefinition == null) { productDefinition = new ProductDefinition { Name = name, Description = description, }; } productDefinition.Deleted = false; return productDefinition; }
private static Table ToTable(ProductDefinition productDefinition) { var t = new Table { Name = productDefinition.Name, Summary = productDefinition.Description, Type = productDefinition.DefinitionType }; t.Parameters = productDefinition.ProductProperties.Select(p => new Parameter { Parent = t, Name = p.Name + (p.IsVariant ? " (Variant)" : "") }); return t; }
/// <summary> /// <para>Called when a user wants to buy the specified Product.</para> /// </summary> /// <param name="developerPayload">Any additional developer-supplied data.</param> /// <param name="product">The product to purchase.</param> public abstract void Purchase(ProductDefinition product, string developerPayload);
/// <summary> /// <para>Called when Unity IAP has finished processing a purchase.</para> /// </summary> /// <param name="transactionId">The transaction ID for the purchase.</param> /// <param name="product">The product that was purchased.</param> public abstract void FinishTransaction(ProductDefinition product, string transactionId);
public void ParentIdHasValue() { ProductDefinition p = new ProductDefinition { ParentFormId = "parent-form-id" }; Assert.IsTrue(p.IsChildForm); }
public void ParentIdNull() { ProductDefinition p = new ProductDefinition { ParentFormId = null }; Assert.IsFalse(p.IsChildForm); }
public void AfterExpiryDate() { ProductDefinition p = new ProductDefinition { ExpiryDate = DateTime.Now.AddMinutes(-2) }; Assert.IsTrue(p.IsExpired); }
public void AfterActiveDate() { ProductDefinition p = new ProductDefinition { ActiveDate = DateTime.Now.AddMinutes(-2) }; Assert.IsTrue(p.IsActive); }
public void ParentIdEmpty() { ProductDefinition p = new ProductDefinition { ParentFormId = string.Empty }; Assert.IsFalse(p.IsChildForm); }
public ProductDefinitionField AddDefinitionField(string name, ProductDefinition product, DataType type, bool multilingual = false) { ProductDefinitionField field = _productDefinitionFields.Value.SingleOrDefault(x => x.Name == name && x.ProductDefinition == product); if (field == null) { field = new ProductDefinitionField(); } field.DataType = type; field.DisplayOnSite = true; field.Name = name; field.ProductDefinition = product; field.RenderInEditor = true; field.Multilingual = multilingual; field.Deleted = false; product.ProductDefinitionFields.Add(field); return field; }
public void BeforeExpiryDate() { ProductDefinition p = new ProductDefinition { ExpiryDate = DateTime.Now.AddMinutes(2) }; Assert.IsFalse(p.IsExpired); }
public void Null() { ProductDefinition p = new ProductDefinition { ExpiryDate = null }; Assert.IsFalse(p.IsExpired); }