Intial
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
@{
|
||||
ViewBag.Title = "Log In";
|
||||
}
|
||||
|
||||
@section Styles {
|
||||
<style>
|
||||
|
||||
body {
|
||||
height: auto;
|
||||
|
||||
}
|
||||
#wrapper {
|
||||
padding-left: 0;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#page-wrapper {
|
||||
padding-top: 0;
|
||||
margin-top: 10%;
|
||||
max-width: 400px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
</style>
|
||||
}
|
||||
|
||||
<h2>Log In</h2>
|
||||
<form name="vm.form" novalidate
|
||||
ng-controller="LoginController as vm"
|
||||
ng-submit="vm.login()">
|
||||
<fieldset ng-disabled="vm.loggingIn">
|
||||
<div class="alert alert-info" ng-hide="vm.errorMessage != null">
|
||||
Please log in to continue...
|
||||
</div>
|
||||
<div class="alert alert-danger" ng-show="vm.errorMessage != null">
|
||||
{{vm.errorMessage}}
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<label class="control-label" for="EmailAddress">Email Address</label>
|
||||
<input required ng-model="vm.emailAddress"
|
||||
class="form-control" name="EmailAddress" type="email" placeholder="your@email.com...">
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
<label class="control-label" for="Password">Password</label>
|
||||
<input required ng-model="vm.password"
|
||||
class="form-control" id="Password" name="Password" type="password" value="" placeholder="your password...">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-success">
|
||||
Log In
|
||||
</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
@@ -0,0 +1,15 @@
|
||||
@model dynamic
|
||||
|
||||
@{
|
||||
ViewBag.Title = "Customers";
|
||||
}
|
||||
|
||||
<div ng-controller="CustomerListController as vm">
|
||||
<h1 class="page-header">
|
||||
Customers
|
||||
<a class="pull-right" href="" ng-click="vm.add()"><i class="fa fa-plus-circle"></i></a>
|
||||
</h1>
|
||||
<div class="customer-list">
|
||||
<customer-details ng-repeat="customer in vm.customers" customer="customer"></customer-details>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,14 @@
|
||||
@model dynamic
|
||||
|
||||
@{
|
||||
ViewBag.Title = "Dashboard";
|
||||
}
|
||||
|
||||
<h1 class="page-header">
|
||||
Dashboard
|
||||
</h1>
|
||||
|
||||
<div>
|
||||
Welcome to Heroic CRM! This is a simple app to demonstrate how .NET's type system
|
||||
can be used to generate client-side code in a strongly-typed way!
|
||||
</div>
|
||||
@@ -0,0 +1,15 @@
|
||||
@model dynamic
|
||||
|
||||
@{
|
||||
ViewBag.Title = "Inventory";
|
||||
}
|
||||
|
||||
<div ng-controller="InventoryListController as vm">
|
||||
<h1 class="page-header">
|
||||
Inventory
|
||||
<a class="pull-right" href="" ng-click="vm.add()"><i class="fa fa-plus-circle"></i></a>
|
||||
</h1>
|
||||
<div class="customer-list">
|
||||
<inventory-details ng-repeat="inventory in vm.inventories" inventory="inventory"></inventory-details>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,23 @@
|
||||
@model InventoryTraker.Web.Models.OpportunityViewModel[]
|
||||
|
||||
@{
|
||||
ViewBag.Title = "Opportunities";
|
||||
}
|
||||
|
||||
<h1 class="page-header">
|
||||
All Opportunities
|
||||
</h1>
|
||||
|
||||
@foreach (var opportunity in Model)
|
||||
{
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<h4>
|
||||
@opportunity.CustomerName - @opportunity.Title
|
||||
<small class="pull-right">@opportunity.CreateDate.ToShortDateString()</small>
|
||||
</h4>
|
||||
<hr />
|
||||
<p>@opportunity.Description</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
@using InventoryTraker.Web.Helpers
|
||||
@model InventoryTraker.Web.Models.ProfileForm
|
||||
|
||||
@{
|
||||
ViewBag.Title = "Your Profile";
|
||||
}
|
||||
|
||||
<h1 class="page-header">Update Your Profile</h1>
|
||||
<form novalidate
|
||||
name="vm.form"
|
||||
ng-controller="EditProfileController as vm"
|
||||
ng-submit="vm.form.$valid && vm.save()"
|
||||
style="max-width: 500px;">
|
||||
<fieldset ng-disabled="vm.saving">
|
||||
|
||||
<div class="alert alert-info" ng-show="vm.errorMessage == null && !vm.saving && !vm.success">
|
||||
Make changes below.
|
||||
</div>
|
||||
<div class="alert alert-info" ng-show="vm.saving">
|
||||
Saving changes...
|
||||
</div>
|
||||
<div class="alert alert-success" ng-show="vm.success">
|
||||
<span class="fa fa-check"></span>
|
||||
Changes saved!
|
||||
</div>
|
||||
<div class="alert alert-danger" ng-show="vm.errorMessage != null">
|
||||
{{vm.errorMessage}}
|
||||
</div>
|
||||
|
||||
@Html.Angular().FormForModel("vm.profile")
|
||||
|
||||
<div class="form-group">
|
||||
<button class="btn btn-success">Save Changes</button>
|
||||
<a class="btn btn-warning" href="/">Cancel</a>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
</form>
|
||||
@section Scripts
|
||||
{
|
||||
<script>
|
||||
var url = '@(Html.BuildUrlFromExpression<ProfileController>(c => c.Update(null)))';
|
||||
|
||||
window.app.constant('editProfileConfig', {
|
||||
saveUrl: url
|
||||
});
|
||||
|
||||
window.app.constant('model', @Html.JsonFor(Model))
|
||||
</script>
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
@using InventoryTraker.Web.Helpers
|
||||
@using InventoryTraker.Web.Models
|
||||
@model dynamic
|
||||
|
||||
@{
|
||||
ViewBag.Title = "Reports";
|
||||
}
|
||||
|
||||
<h1 class="page-header">
|
||||
Reports
|
||||
</h1>
|
||||
|
||||
@(Html.Angular().GridFor<ReportController>(c => c.NewCustomers())
|
||||
.Title("New Customers")
|
||||
.Columns<NewCustomerReportViewModel>(config =>
|
||||
{
|
||||
config.Add(x => x.Name);
|
||||
config.Add(x => x.WorkEmail);
|
||||
config.Add(x => x.CreateDate, "Date Joined", "date: 'MM/dd/yyyy'");
|
||||
}))
|
||||
|
||||
<lost-customers-report ></lost-customers-report>
|
||||
@@ -0,0 +1,23 @@
|
||||
@model InventoryTraker.Web.Models.RiskViewModel[]
|
||||
|
||||
@{
|
||||
ViewBag.Title = "Risks";
|
||||
}
|
||||
|
||||
<h1 class="page-header">
|
||||
All Risks
|
||||
</h1>
|
||||
|
||||
@foreach (var risk in Model)
|
||||
{
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<h4>
|
||||
@risk.CustomerName - @risk.Title
|
||||
<small class="pull-right">@risk.CreateDate.ToShortDateString()</small>
|
||||
</h4>
|
||||
<hr />
|
||||
<p>@risk.Description</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
@using System.Web.Optimization
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" ng-app="InventoryTraker">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>@ViewBag.Title - InventoryTraker</title>
|
||||
@Styles.Render("~/Content/all.css")
|
||||
@RenderSection("Styles", required: false)
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrapper" ng-cloak>
|
||||
@(Request.IsAuthenticated ? Html.Partial("_NavigationHero") : Html.Partial("_NavigationNoAuth"))
|
||||
<div id="page-wrapper">
|
||||
<div class="container-fluid">
|
||||
@RenderBody()
|
||||
</div>
|
||||
</div>
|
||||
<!-- /#page-wrapper -->
|
||||
</div>
|
||||
<!-- /#wrapper -->
|
||||
@Scripts.Render("~/js/all.js")
|
||||
@RenderSection("Scripts", required: false)
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@* This is based on the (excellent) SB Admin: http://startbootstrap.com/template-overviews/sb-admin/ *@
|
||||
@@ -0,0 +1,35 @@
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="~/">Inventory Traker</a>
|
||||
</div>
|
||||
<!-- Top Menu Items -->
|
||||
<ul class="nav navbar-right top-nav">
|
||||
<li class="dropdown">
|
||||
<a href="" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user"></i> @User.Identity.Name <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<ProfileController>(c => c.Index()))"><i class="fa fa-fw fa-user"></i> Profile</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<AuthenticationController>(c => c.Logout()))"><i class="fa fa-fw fa-power-off"></i> Log Out</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<InventoryController>(c => c.Index()))"><i class="fa fa-fw fa-list"></i> Inventory</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
@@ -0,0 +1,47 @@
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="~/">Inventory Traker</a>
|
||||
</div>
|
||||
<!-- Top Menu Items -->
|
||||
<ul class="nav navbar-right top-nav">
|
||||
<li class="dropdown">
|
||||
<a href="" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-user"></i> @User.Identity.Name <b class="caret"></b></a>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<ProfileController>(c => c.Index()))"><i class="fa fa-fw fa-user"></i> Profile</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<AuthenticationController>(c => c.Logout()))"><i class="fa fa-fw fa-power-off"></i> Log Out</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- Sidebar Menu Items - These collapse to the responsive navigation menu on small screens -->
|
||||
<div class="collapse navbar-collapse navbar-ex1-collapse">
|
||||
<ul class="nav navbar-nav side-nav">
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<HomeController>(c => c.Index()))"><i class="fa fa-fw fa-dashboard"></i> Dashboard</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<CustomerController>(c => c.Index()))"><i class="fa fa-fw fa-users"></i> Customers</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<OpportunityController>(c => c.Index()))"><i class="fa fa-fw fa-dollar"></i> Opportunities</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<RiskController>(c => c.Index()))"><i class="fa fa-fw fa-exclamation-triangle"></i> Risks</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="@(Html.BuildUrlFromExpression<ReportController>(c => c.Index()))"><i class="fa fa-fw fa-line-chart"></i> Reports</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /.navbar-collapse -->
|
||||
</nav>
|
||||
@@ -0,0 +1,6 @@
|
||||
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||
<!-- Brand and toggle get grouped for better mobile display -->
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand" href="~/">Inventory Traker</a>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -0,0 +1,3 @@
|
||||
@{
|
||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
|
||||
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
||||
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
|
||||
<system.web.webPages.razor>
|
||||
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
|
||||
<pages pageBaseType="System.Web.Mvc.WebViewPage">
|
||||
<namespaces>
|
||||
<add namespace="System.Web.Mvc" />
|
||||
<add namespace="System.Web.Mvc.Ajax" />
|
||||
<add namespace="System.Web.Mvc.Html" />
|
||||
<add namespace="System.Web.Routing" />
|
||||
<add namespace="Microsoft.Web.Mvc" />
|
||||
<add namespace="InventoryTraker.Web" />
|
||||
<add namespace="InventoryTraker.Web.Controllers" />
|
||||
</namespaces>
|
||||
</pages>
|
||||
</system.web.webPages.razor>
|
||||
|
||||
<appSettings>
|
||||
<add key="webpages:Enabled" value="false" />
|
||||
</appSettings>
|
||||
|
||||
<system.webServer>
|
||||
<handlers>
|
||||
<remove name="BlockViewHandler"/>
|
||||
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
|
||||
</handlers>
|
||||
</system.webServer>
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user