Skip to content

Commit 42539c8

Browse files
authored
Merge pull request #17 from aspnetzero/v4.1-changes
V4.1 changes
2 parents 34f72bd + 38d2272 commit 42539c8

20 files changed

+445
-122
lines changed

doc/Change-Logs.html

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,27 @@
88
</head>
99

1010
<body>
11+
<h3>v4.1.0 (2017-06-23)</h3>
12+
<ul>
13+
<li>Basic tenant <strong>subscription management</strong> for SaaS
14+
applications.</li>
15+
<li><strong>Paypal</strong> integration for tenant subscriptions.</li>
16+
<li><strong>IdentityServer4</strong> integration.</li>
17+
<li><strong>Host dashboard</strong> for edition, tenant &amp; income statistics.</li>
18+
<li><strong>Public web site</strong> is moved to a seperated project (and
19+
authentication integrated to the main application).</li>
20+
<li>Renewed sample <strong>tenant dashboard</strong>.</li>
21+
<li>Converted <strong>unit tests</strong> to use <strong>SQLite in memory</strong>
22+
database.</li>
23+
<li>Upgraded to latest Angular, Angular CLI, ASP.NET Core, ABP packages and
24+
Metronic.</li>
25+
</ul>
1126
<h3>v4.0.0 (2017-04-24)</h3>
1227
<ul>
1328
<li><strong>.net core</strong> support to create cross platform web
1429
solutions.</li>
15-
<li>Moved to Entity Framework Core and ASP.NET Core Identity.</li>
16-
<li>Docker files included to deploy as containers.</li>
30+
<li>Moved to <strong>Entity Framework Core</strong> and <strong>ASP.NET Core Identity</strong>.</li>
31+
<li><strong>Docker</strong> files included to deploy as containers.</li>
1732
<li>Spanish (Mexico) localization.</li>
1833
</ul>
1934
<h3>v3.4.0 (2017-04-05)</h3>
@@ -25,16 +40,16 @@ <h3>v3.4.0 (2017-04-05)</h3>
2540
</ul>
2641
<h3>v3.3.0 (2017-03-13)</h3>
2742
<ul>
28-
<li>Migrated ASP.NET Core solution to Visual Studio 2017 and new csproj
43+
<li>Migrated ASP.NET Core solution to <strong>Visual Studio 2017</strong> and new csproj
2944
solution format.</li>
30-
<li>Implemented desktop push notifications for real time application
45+
<li>Implemented <strong>desktop push notifications</strong> for real time application
3146
notifications.</li>
3247
<li>Minor enhancements and fixes.</li>
3348
</ul>
3449
<h3>v3.2.0 (2017-03-07)</h3>
3550
<ul>
36-
<li>Tenant based UI customizations (allow tenants to upload custom CSS
37-
and logo).</li>
51+
<li>Tenant based UI customizations: Allow tenants to upload <strong>custom CSS
52+
and logo</strong>.</li>
3853
<li>Edition based user count restriction.</li>
3954
<li>Upgraded to Angular v2.4.9 and Angular CLI RC.1.</li>
4055
<li>Upgraded to ABP v1.5.</li>
@@ -44,9 +59,10 @@ <h3>v3.2.0 (2017-03-07)</h3>
4459
<h3>v3.1.0 (2017-02-14)</h3>
4560
<ul>
4661
<li>Angular 2.x UI<ul>
47-
<li>Angular 2 AOT (Ahead Of Time) Compilation, and HMR (Hot Module
48-
Replacement) and lazy loaded modules.</li>
49-
<li>Created tenant registration view to Angular2 application.</li>
62+
<li>Angular 2 <strong>AOT</strong> (Ahead Of Time) Compilation, and
63+
<strong>HMR</strong> (Hot Module
64+
Replacement) and <strong>lazy loaded</strong> modules.</li>
65+
<li>Created <strong>tenant registration</strong> view to Angular2 application.</li>
5066
<li>Added URL rewrite configuration to deploy under IIS.</li>
5167
<li>Upgraded to latest Angular and Angular CLI.</li>
5268
</ul>
@@ -66,7 +82,7 @@ <h3>v3.1.0 (2017-02-14)</h3>
6682
</ul>
6783
<h3>v3.0.0 (2017-01-06)</h3>
6884
<ul>
69-
<li><strong>Angular 2.x</strong> version with ASP.NET Core 1.x backend.</li>
85+
<li><strong>Angular 2.x</strong> version with <strong>ASP.NET Core 1.x</strong> backend.</li>
7086
<li>Upgraded to ABP v1.2.</li>
7187
<li>Minor improvements and fixes.</li>
7288
</ul>

doc/Developing-Step-By-Step-Angular.html

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,41 +1203,45 @@ <h3>Adding Database Migration</h3>
12031203
<img class="img-thumbnail" alt="Entity Framework Migration" src="images/phonebook-migrations-core-4.png" /></p>
12041204
<p>This will create a new code based migration file to create <strong>PbPhones</strong>
12051205
table:</p>
1206-
<pre lang="cs">
1207-
public partial class Added_Persons_Table : Migration
1206+
<pre lang="cs">public partial class Added_Phone : Migration
12081207
{
12091208
protected override void Up(MigrationBuilder migrationBuilder)
12101209
{
12111210
migrationBuilder.CreateTable(
1212-
name: "PbPersons",
1211+
name: "PbPhones",
12131212
columns: table =&gt; new
12141213
{
1215-
Id = table.Column&lt;int&gt;(nullable: false)
1214+
Id = table.Column&lt;long&gt;(nullable: false)
12161215
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
12171216
CreationTime = table.Column&lt;DateTime&gt;(nullable: false),
12181217
CreatorUserId = table.Column&lt;long&gt;(nullable: true),
1219-
DeleterUserId = table.Column&lt;long&gt;(nullable: true),
1220-
DeletionTime = table.Column&lt;DateTime&gt;(nullable: true),
1221-
EmailAddress = table.Column&lt;string&gt;(maxLength: 255, nullable: true),
1222-
IsDeleted = table.Column&lt;bool&gt;(nullable: false),
1223-
LastModificationTime = table.Column&lt;DateTime&gt;(nullable: true),
1224-
LastModifierUserId = table.Column&lt;long&gt;(nullable: true),
1225-
Name = table.Column&lt;string&gt;(maxLength: 32, nullable: false),
1226-
Surname = table.Column&lt;string&gt;(maxLength: 32, nullable: false)
1218+
Number = table.Column&lt;string&gt;(maxLength: 16, nullable: false),
1219+
PersonId = table.Column&lt;int&gt;(nullable: false),
1220+
Type = table.Column&lt;byte&gt;(nullable: false)
12271221
},
12281222
constraints: table =&gt;
12291223
{
1230-
table.PrimaryKey("PK_PbPersons", x =&gt; x.Id);
1224+
table.PrimaryKey("PK_PbPhones", x =&gt; x.Id);
1225+
table.ForeignKey(
1226+
name: "FK_PbPhones_PbPersons_PersonId",
1227+
column: x =&gt; x.PersonId,
1228+
principalTable: "PbPersons",
1229+
principalColumn: "Id",
1230+
onDelete: ReferentialAction.Cascade);
12311231
});
1232+
1233+
migrationBuilder.CreateIndex(
1234+
name: "IX_PbPhones_PersonId",
1235+
table: "PbPhones",
1236+
column: "PersonId");
12321237
}
12331238

12341239
protected override void Down(MigrationBuilder migrationBuilder)
12351240
{
12361241
migrationBuilder.DropTable(
1237-
name: "PbPersons");
1242+
name: "PbPhones");
12381243
}
1239-
}
1240-
</pre>
1244+
}</pre>
12411245
<p>Before updating database, we can go to database <strong>InitialPeopleCreator</strong>, rename it to <strong>InitialPeopleAndPhoneCreator</strong>
12421246
and add example <strong>phone numbers</strong> for example people (We renamed
12431247
InitialPeopleCreator.cs to InitialPeopleAndPhoneCreator.cs):</p>

doc/Development-Guide-Angular.html

Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
66
<link type="text/css" rel="stylesheet" href="bootstrap.min.css" />
77
<title>Development Guide</title>
8+
<style type="text/css">
9+
.auto-style1 {
10+
font-weight: bold;
11+
}
12+
</style>
813
</head>
914

1015
<body>
@@ -21,6 +26,12 @@ <h4>About This Document</h4>
2126
<a href="https://aspnetboilerplate.com/Pages/Documents">documentation</a>.</p>
2227
<p>Before reading this document, it's suggested to run the application and explore
2328
the user interface. This will help you to have a better understanding of concepts defined here.</p>
29+
<div class="bs-callout bs-callout-warning">
30+
<p class="auto-style1">About Server Side</p>
31+
<p>This document is only for the <strong>Angular</strong> application. For
32+
<strong>server side</strong>, see <a href="Development-Guide-Core.html">ASP.NET
33+
Core documentation</a> too.</p>
34+
</div>
2435
<h4>Pre Requirements</h4>
2536
<p>Following tools are needed in order to use the solution:</p>
2637
<ul>
@@ -29,7 +40,7 @@ <h4>Pre Requirements</h4>
2940
<li><a href="https://yarnpkg.com/lang/en/" target="_blank">Yarn</a></li>
3041
</ul>
3142
<p>In addition, see <a href="Development-Guide-Core.html">AspNet Core</a>
32-
documentation for server side requirements.</p>
43+
documentation for server side requirements and other server side features.</p>
3344
<h5>IDE</h5>
3445
<p>It's suggested to use an IDE to develop your project. We used
3546
<a href="https://www.visualstudio.com">Visual Studio 2017</a>,
@@ -250,7 +261,7 @@ <h3>AppModule</h3>
250261
will mostly work on this application to add your business requirements. A
251262
screenshot from the application:</p>
252263
<p>
253-
<img class="img-thumbnail" alt="Dashboard" height="870" src="images/dashboard.png" width="1339" /></p>
264+
<img class="img-thumbnail" alt="Dashboard" height="965" src="images/dashboardV2.png" width="1235" /></p>
254265
<p>Folder structure of the source code is like that:</p>
255266
<p>
256267
<img class="img-thumbnail" alt="Angular app module files" height="450" src="images/ng2-app-module.png" width="223" /></p>
@@ -281,18 +292,19 @@ <h4>Edition Management</h4>
281292
<p>
282293
<img class="img-thumbnail" alt="Editions page" src="images/editions-page-core-2.png" /></p>
283294
<p>Editions are used to group feature values and assign to tenants. When we
284-
click Actions/Edit for an edition, we can see it's assigned features:</p>
295+
click Actions/Edit for an edition, we can see it&#39;s poperties:</p>
296+
<p>
297+
<img class="img-thumbnail" alt="Edit Edition" height="882" src="images/edition-edit.png" width="595" /></p>
298+
<p>
299+
An edition can be free or paid. If it&#39;s a paid edition then you should enter
300+
monthly and annual prices. You can allow tenants to use trial version of this
301+
edition for a specified days. Then you can determine an expire strategy: How
302+
many days to allow a tenant to use the application after subscription expires.
303+
And finally, you can deactivate tenant or assign to a free edition if they don&#39;t
304+
extend their subscription.</p>
305+
<p>Features tab is used to determing features available for the edition:</p>
285306
<p>
286307
<img class="img-thumbnail" alt="Edit edition features" height="343" src="images/edition-feature-editing-core.png" width="615" /></p>
287-
<p>Startup project only contains Chat feature (and it's 2 sub-features) that can
288-
be enabled/disabled per edition/tenant. All features are defined in <strong>
289-
AppFeatureProvider</strong> class in the <a href="Development-Guide-Core.html">
290-
server side</a> and automatically rendered here. Feature values are stored in <strong>
291-
AbpFeatures</strong> table in the database. Features are not restricted to boolean
292-
(enabled/disabled) values and can contain different type of values as shown
293-
below:&nbsp;</p>
294-
<p>
295-
<img class="img-thumbnail" alt="Edition feature editing" height="317" src="images/edition-feature-editing.png" width="613" /></p>
296308
<p>See
297309
<a href="https://aspnetboilerplate.com/Pages/Documents/Feature-Management">
298310
feature management</a> and
@@ -320,7 +332,7 @@ <h4>Tenant Management</h4>
320332
<p>When we
321333
click the "<strong>Create New Tenant</strong>" button, a dialog is shown:</p>
322334
<p>
323-
<img class="img-thumbnail" alt="Creating tenant" height="667" src="images/create-tenant-4.png" width="615" /></p>
335+
<img class="img-thumbnail" alt="Tenant Creation Modal" height="771" src="images/tenant-create-modal.png" width="596" /></p>
324336
<p><strong>Tenancy name</strong> should be unique and can not contain spaces or
325337
other special chars since it may be used as subdomain name (like
326338
tenancyname.mydomain.com). <strong>Name</strong> can be anything. <strong>Admin email</strong>
@@ -336,6 +348,9 @@ <h4>Tenant Management</h4>
336348
That means you can use host database for some tenants and create dedicated
337349
databases for some other tenants. Even you can <strong>group </strong>some
338350
tenants in a separated database.</p>
351+
<p>Once you assign an edition to the tenant, you can select an expiration date
352+
(see edition management section to know what happens after subscription
353+
expiration).</p>
339354
<h5>Tenant Edition and Features</h5>
340355
<p>An <strong>edition</strong> can be <strong>assigned</strong> to a tenant
341356
(while creating or editing). Tenant will inherit all features of the assigned
@@ -356,6 +371,13 @@ <h5>Using Tenancy Name As Subdomain</h5>
356371
<strong>tenant1</strong>.mydomain.com, <strong>tenant2</strong>.mydomain.com and
357372
so on. ASP.NET Zero automatically identify and get tenant name from subdomain.
358373
See application configuration section.</p>
374+
<h4>Host Dashboard</h4>
375+
<p>Host dashboard is used to show some statistics about tenants, editions and
376+
income:</p>
377+
<p>
378+
<img class="img-thumbnail" alt="Host dashboard" height="495" src="images/host-dashboard%20-%20Copy.jpg" width="600" /></p>
379+
<p>This is a fully implemented dashboard except two sample statistics (sample
380+
statistics 1 &amp; 2) those are placeholders for your own statistics.</p>
359381
<h4>Organization Units</h4>
360382
<p>Organization units (OU) are used to hierarchically group user and entities.
361383
Then you can get user or entities based on their OUs. When we click
@@ -497,6 +519,12 @@ <h4>Audit Logs</h4>
497519
<img class="img-thumbnail" alt="Audit Log" height="827" src="images/audit-logs-detail.png" width="620" /></p>
498520
<p>
499521
Audit log report is provided by <strong>AuditLogAppService</strong> class.</p>
522+
<h4>
523+
Subscription</h4>
524+
<p>
525+
Tenants can manage (show, extend or upgrade) their edition/plan subscriptions using this page:</p>
526+
<p>
527+
<img class="img-thumbnail" alt="Subscription" height="300" src="images/subscription.png" width="413" /></p>
500528
<h4>Host Settings</h4>
501529
<p>Host settings page is used to configure some system settings:</p>
502530
<p>
@@ -554,10 +582,8 @@ <h4>Tenant Dashboard</h4>
554582
your actual dashboard. It's implemented with app/main/<strong>dashboard.component</strong>
555583
in <strong>main.module</strong>.</p>
556584
<p>
557-
<img class="img-thumbnail" alt="Dashboard" height="870" src="images/dashboard.png" width="1339" /></p>
558-
<p>In this dashboard, only <strong>Member Activity</strong> graph data is retrieved from
559-
server. You can click the refresh button to generate random
560-
graphs.</p>
585+
<img class="img-thumbnail" alt="Dashboard" height="965" src="images/dashboardV2.png" width="1235" /></p>
586+
<p>Client gets all data from server, server generates random data.</p>
561587
<h4>Notifications</h4>
562588
<p>Notification icon is located next to the language selection button. The number in the red circle shows unread notification count.</p>
563589
<p><img alt="notifications" src="images/notifications-icon.png" width="189" class="img-thumbnail"/></p>
@@ -823,7 +849,7 @@ <h3>Used Library &amp; Frameworks</h3>
823849
<p>Many open source frameworks and libraries are used to build ASP.NET Zero
824850
project. Here, a list of all libraries:</p>
825851
<ul>
826-
<li><a href="https://angular.io/" target="_blank">Angular (v2+)</a></li>
852+
<li><a href="https://angular.io/" target="_blank">Angular</a></li>
827853
<li><a href="https://cli.angular.io/" target="_blank">Angular-cli</a></li>
828854
<li><a href="http://typescriptlang.org/" target="_blank">Typescript</a></li>
829855
<li><a href="http://asp.net/signalr" target="_blank">SignalR</a></li>

0 commit comments

Comments
 (0)