نیاز مشتری: می خواهد بداند که کالای x ثبت شده توسط کاربر Y چقدر فروش داشته
برای این کار بنده یک پلاگین اضافه کردم کارهایی که انجام دادم به ترتیب:
1- روی پوشه plugin راست کلیک و افزودن class library برای ایجاد پلاگین جدید
2-کپی کردن فایلهای web.config , Description از پلاگین های دیگر
3- اعمال تغییرات در فایل description
4- راست کلیک روی refrence و اضافه کردن dll های : system.web
system.web.mvc
nop.web.framework
nop.data
nop.core
nop.services
5-نیازی به افزودن جدول جدید ندارم و گزارش از جداول order , orderItem , product نیاز این گزارش را رفع می کند.
6-افزودن کلاس context در پوشه data به صورت زیر:
7 - افزودن کلاس dependencyRegistrar در پوشه Data به صورت زیر:
برای این کار بنده یک پلاگین اضافه کردم کارهایی که انجام دادم به ترتیب:
1- روی پوشه plugin راست کلیک و افزودن class library برای ایجاد پلاگین جدید
2-کپی کردن فایلهای web.config , Description از پلاگین های دیگر
3- اعمال تغییرات در فایل description
4- راست کلیک روی refrence و اضافه کردن dll های : system.web
system.web.mvc
nop.web.framework
nop.data
nop.core
nop.services
5-نیازی به افزودن جدول جدید ندارم و گزارش از جداول order , orderItem , product نیاز این گزارش را رفع می کند.
6-افزودن کلاس context در پوشه data به صورت زیر:
public class SaleProductReportContext:DbContext,IDbContext
{
public SaleProductReportContext(string nameOrConnectionString) : base(nameOrConnectionString) { }
public string CreateDataBaseInstallationScript()
{
return ((IObjectContextAdapter)this).ObjectContext.CreateDatabaseScript();
}
public void Install()
{
Database.SetInitializer<SaleProductReportContext>(null);
Database.ExecuteSqlCommand(CreateDataBaseInstallationScript());
SaveChanges();
}
public void Uninstall()
{
//حذف جداول ساخته شده که اینجا نداشتیم
}
public bool AutoDetectChangesEnabled
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public bool ProxyCreationEnabled
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public void Detach(object entity)
{
throw new NotImplementedException();
}
public int ExecuteSqlCommand(string sql, bool doNotEnsureTransaction = false, int? timeout = default(int?), params object[] parameters)
{
throw new NotImplementedException();
}
public IList<TEntity> ExecuteStoredProcedureList<TEntity>(string commandText, params object[] parameters) where TEntity : BaseEntity, new()
{
throw new NotImplementedException();
}
public IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters)
{
throw new NotImplementedException();
}
IDbSet<TEntity> IDbContext.Set<TEntity>()
{
return base.Set<TEntity>();
}
}
7 - افزودن کلاس dependencyRegistrar در پوشه Data به صورت زیر:
public class SaleProductReportDependencyRegistrar : IDependencyRegistrar
{
private const string CONTEXT_NAME = "nop_object_context_sale_product";
public int Order
{
get
{
return 1;
}
}
public void Register(ContainerBuilder builder, ITypeFinder typeFinder, NopConfig config)
{
this.RegisterPluginDataContext<SaleProductReportContext>(builder, CONTEXT_NAME);
builder.RegisterType<EfRepository<OrderItem>>()
.As<IRepository<OrderItem>>()
.WithParameter(ResolvedParameter.ForNamed<IDbContext>(CONTEXT_NAME))
.InstancePerLifetimeScope();
}
}