@using Dynamicweb.Rendering;
@using Dynamicweb.Ecommerce.ProductCatalog;
@using System.Collections.Generic;
@using System.Text;
@using System.Linq;
@using Dynamicweb.Ecommerce;
@using Dynamicweb.Ecommerce.Services;
@inherits ViewModelTemplate<ProductListViewModel>
@{
string languageId = Dynamicweb.Core.Converter.ToString(
Dynamicweb.Context.Current.Request.QueryString["languageId"]) ?? "LANG1";
}
@functions
{
public class Field
{
public string ID { get; set; }
public string Label { get; set; }
public Field(string id, string label)
{
ID = id;
Label = label;
}
}
public List<Field> GetFields()
{
return new List<Field>
{
new Field("Id", "Product Id"),
new Field("VariantId", "Variant Id"),
new Field("Number", "Number"),
new Field("Name", "Name"),
new Field("GroupPaths", "GroupPaths"),
new Field("LanguageId", "LanguageId"),
new Field("VarientName", "VarientName"),
new Field("ProductGroup", "ProductGroup"),
};
}
public string GenerateCsv(string currentLanguageId)
{
var fields = GetFields();
var headerSystemNames = fields.Select(f => f.ID).ToList();
var contentBuilder = new StringBuilder();
contentBuilder.Append(Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()));
// Generate CSV header
contentBuilder.AppendLine(string.Join(";", fields.Select(f => $"\"{f.Label}\"")));
// Generate CSV rows
foreach (var product in Model.Products)
{
var values = new string[headerSystemNames.Count];
for (int i = 0; i < fields.Count; i++)
{
values[i] = GetFieldValue(product, fields[i].ID, currentLanguageId);
}
contentBuilder.AppendLine(string.Join(";", values.Select(v => "\"" + v.Replace("\"", "'") + "\"")));
}
return contentBuilder.ToString();
}
public string GetFieldValue(ProductViewModel product, string fieldId, string currentLanguageId)
{
switch (fieldId)
{
case "Id":
return product.Id ?? "";
case "VariantId":
return product.VariantId ?? "";
case "Number":
return product.Number ?? "";
case "Name":
return product.Name ?? "";
//test
case "GroupPaths":
try {
if (product.GroupPaths != null) {
string groupPath = string.Join("|", product.GroupPaths.SelectMany(gr => gr).Select(item => item.Name));
return groupPath;
}
} catch {}
return "";
case "LanguageId":
return currentLanguageId;
case "VarientName":
return product.VariantName ?? "";
//test
case "ProductGroup":
return Dynamicweb.Ecommerce.Services.Groups.GetGroup("Group1").Name;
return "";
default:
return "";
}
}
}
@GenerateCsv(languageId)