├── .nuget ├── NuGet.Config ├── NuGet.exe └── NuGet.targets ├── LICENSE ├── PM-Dashboard.Tests ├── App.config ├── PM-Dashboard.Tests.csproj ├── Properties │ └── AssemblyInfo.cs └── packages.config ├── PM-Dashboard.sln ├── PM-Dashboard ├── App_Start │ ├── BundleConfig.cs │ ├── FilterConfig.cs │ └── RouteConfig.cs ├── Content │ ├── app.css │ ├── app.html5bp.css │ ├── fonts │ │ ├── ._glyphicons-halflings-regular.eot │ │ ├── ._glyphicons-halflings-regular.svg │ │ ├── ._glyphicons-halflings-regular.ttf │ │ ├── ._glyphicons-halflings-regular.woff │ │ ├── ._glyphicons-halflings-regular.woff2 │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ └── images │ │ ├── ._glyphicons-halflings-white.png │ │ ├── ._glyphicons-halflings.png │ │ ├── ._igicons-pm-opt.png │ │ ├── ._igicons-pm.png │ │ ├── employees │ │ ├── ._0000001.png │ │ ├── ._0000002.png │ │ ├── ._0000003.png │ │ ├── ._0000004.png │ │ ├── ._0000005.png │ │ ├── ._0000006.png │ │ ├── ._0000007.png │ │ ├── ._0000008.png │ │ ├── ._0000009.png │ │ ├── ._0000010.png │ │ ├── ._0000011.png │ │ ├── ._0000012.png │ │ ├── ._0000013.png │ │ ├── ._0000014.png │ │ ├── ._0000015.png │ │ ├── ._0000016.png │ │ ├── ._0000017.png │ │ ├── ._0000018.png │ │ ├── ._0000019.png │ │ ├── ._0000020.png │ │ ├── ._0000021.png │ │ ├── ._0000022.png │ │ ├── ._0000023.png │ │ ├── ._0000024.png │ │ ├── ._0000025.png │ │ ├── 0000001.png │ │ ├── 0000002.png │ │ ├── 0000003.png │ │ ├── 0000004.png │ │ ├── 0000005.png │ │ ├── 0000006.png │ │ ├── 0000007.png │ │ ├── 0000008.png │ │ ├── 0000009.png │ │ ├── 0000010.png │ │ ├── 0000011.png │ │ ├── 0000012.png │ │ ├── 0000013.png │ │ ├── 0000014.png │ │ ├── 0000015.png │ │ ├── 0000016.png │ │ ├── 0000017.png │ │ ├── 0000018.png │ │ ├── 0000019.png │ │ ├── 0000020.png │ │ ├── 0000021.png │ │ ├── 0000022.png │ │ ├── 0000023.png │ │ ├── 0000024.png │ │ └── 0000025.png │ │ ├── glyphicons-halflings-white.png │ │ ├── glyphicons-halflings.png │ │ ├── igicons-pm-opt.png │ │ └── igicons-pm.png ├── Controllers │ └── HomeController.cs ├── Global.asax ├── Global.asax.cs ├── Images │ ├── accent.png │ ├── bullet.png │ ├── heroAccent.png │ ├── icons │ │ ├── android-icon-144x144.png │ │ ├── android-icon-192x192.png │ │ ├── android-icon-36x36.png │ │ ├── android-icon-48x48.png │ │ ├── android-icon-72x72.png │ │ ├── android-icon-96x96.png │ │ ├── apple-icon-114x114.png │ │ ├── apple-icon-120x120.png │ │ ├── apple-icon-144x144.png │ │ ├── apple-icon-152x152.png │ │ ├── apple-icon-180x180.png │ │ ├── apple-icon-57x57.png │ │ ├── apple-icon-60x60.png │ │ ├── apple-icon-72x72.png │ │ ├── apple-icon-76x76.png │ │ ├── apple-icon-precomposed.png │ │ ├── apple-icon.png │ │ ├── apple-touch-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── ms-icon-144x144.png │ │ ├── ms-icon-150x150.png │ │ ├── ms-icon-310x310.png │ │ └── ms-icon-70x70.png │ ├── orderedList0.png │ ├── orderedList1.png │ ├── orderedList2.png │ ├── orderedList3.png │ ├── orderedList4.png │ ├── orderedList5.png │ ├── orderedList6.png │ ├── orderedList7.png │ ├── orderedList8.png │ └── orderedList9.png ├── Infragistics.Web.Mvc.Free.dll ├── Models │ └── ResourceData.cs ├── PM-Dashboard.csproj ├── Properties │ └── AssemblyInfo.cs ├── Resources │ ├── Main.Designer.cs │ ├── Main.ja.Designer.cs │ ├── Main.ja.resx │ └── Main.resx ├── Scripts │ ├── _references.js │ ├── app │ │ ├── app.actions.js │ │ ├── app.main.js │ │ ├── app.utils.js │ │ ├── app.viewmodels.js │ │ ├── resources.js │ │ └── resources.min.js │ ├── i18n │ │ ├── locale-en.js │ │ └── locale-ja.js │ ├── ignite │ │ ├── infragistics.core.js │ │ ├── infragistics.dv.js │ │ └── infragistics.lob.js │ ├── jquery-1.11.2.min.js │ ├── jquery-mCustomScrollbar.3.0.8.js │ ├── jquery-ui-1.10.3.min.js │ ├── knockout-3.3.0.min.js │ ├── modernizr-2.8.3.js │ └── modernizr-2.8.3.min.js ├── Views │ ├── Home │ │ └── Index.cshtml │ ├── Shared │ │ ├── Error.cshtml │ │ └── _Layout.cshtml │ ├── Web.config │ └── _ViewStart.cshtml ├── Web.Debug.config ├── Web.Release.config ├── Web.config ├── browserconfig.xml ├── favicon.ico ├── manifest.json └── packages.config ├── README.md └── packages └── repositories.config /.nuget/NuGet.Config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.nuget/NuGet.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/.nuget/NuGet.exe -------------------------------------------------------------------------------- /.nuget/NuGet.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildProjectDirectory)\..\ 5 | 6 | 7 | false 8 | 9 | 10 | false 11 | 12 | 13 | true 14 | 15 | 16 | false 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 | 29 | 30 | $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) 31 | 32 | 33 | 34 | 35 | $(SolutionDir).nuget 36 | 37 | 38 | 39 | $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config 40 | $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config 41 | 42 | 43 | 44 | $(MSBuildProjectDirectory)\packages.config 45 | $(PackagesProjectConfig) 46 | 47 | 48 | 49 | 50 | $(NuGetToolsPath)\NuGet.exe 51 | @(PackageSource) 52 | 53 | "$(NuGetExePath)" 54 | mono --runtime=v4.0.30319 "$(NuGetExePath)" 55 | 56 | $(TargetDir.Trim('\\')) 57 | 58 | -RequireConsent 59 | -NonInteractive 60 | 61 | "$(SolutionDir) " 62 | "$(SolutionDir)" 63 | 64 | 65 | $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) 66 | $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols 67 | 68 | 69 | 70 | RestorePackages; 71 | $(BuildDependsOn); 72 | 73 | 74 | 75 | 76 | $(BuildDependsOn); 77 | BuildPackage; 78 | 79 | 80 | 81 | 82 | 83 | 84 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 99 | 100 | 103 | 104 | 105 | 106 | 108 | 109 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 141 | 142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 IgniteUI - HTML5/jQuery Controls and Tools 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /PM-Dashboard.Tests/App.config: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /PM-Dashboard.Tests/PM-Dashboard.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 7 | 8 | 2.0 9 | {2439933D-E255-4E9E-BB2D-03D79B4539B3} 10 | Library 11 | Properties 12 | PM_Dashboard.Tests 13 | PM-Dashboard.Tests 14 | v4.5 15 | 512 16 | {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 17 | SAK 18 | SAK 19 | SAK 20 | SAK 21 | ..\ 22 | true 23 | 24 | 25 | true 26 | full 27 | false 28 | bin\Debug\ 29 | DEBUG;TRACE 30 | prompt 31 | 4 32 | 33 | 34 | pdbonly 35 | true 36 | bin\Release\ 37 | TRACE 38 | prompt 39 | 4 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | True 58 | ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll 59 | 60 | 61 | True 62 | ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.0\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll 63 | 64 | 65 | ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll 66 | 67 | 68 | 69 | 70 | ..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll 71 | 72 | 73 | 74 | 75 | True 76 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.Helpers.dll 77 | 78 | 79 | ..\packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll 80 | 81 | 82 | ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll 83 | 84 | 85 | True 86 | ..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll 87 | 88 | 89 | True 90 | ..\packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll 91 | 92 | 93 | True 94 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll 95 | 96 | 97 | True 98 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll 99 | 100 | 101 | True 102 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | {ED8E9BCF-2899-4B1C-B5AD-873EC41E34F7} 117 | PM-Dashboard 118 | 119 | 120 | 121 | 122 | 129 | -------------------------------------------------------------------------------- /PM-Dashboard.Tests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("PM_Dashboard.Tests")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("PM_Dashboard.Tests")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("9cd89ef6-a929-4201-b903-42eee5ff5a7c")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /PM-Dashboard.Tests/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /PM-Dashboard.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.30723.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PM-Dashboard", "PM-Dashboard\PM-Dashboard.csproj", "{ED8E9BCF-2899-4B1C-B5AD-873EC41E34F7}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PM-Dashboard.Tests", "PM-Dashboard.Tests\PM-Dashboard.Tests.csproj", "{2439933D-E255-4E9E-BB2D-03D79B4539B3}" 9 | EndProject 10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{B7B8EBF6-71DB-4DCA-AAC8-2CD7330FD531}" 11 | ProjectSection(SolutionItems) = preProject 12 | .nuget\NuGet.Config = .nuget\NuGet.Config 13 | .nuget\NuGet.exe = .nuget\NuGet.exe 14 | .nuget\NuGet.targets = .nuget\NuGet.targets 15 | EndProjectSection 16 | EndProject 17 | Global 18 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 19 | Debug|Any CPU = Debug|Any CPU 20 | Release|Any CPU = Release|Any CPU 21 | EndGlobalSection 22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 23 | {ED8E9BCF-2899-4B1C-B5AD-873EC41E34F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 24 | {ED8E9BCF-2899-4B1C-B5AD-873EC41E34F7}.Debug|Any CPU.Build.0 = Debug|Any CPU 25 | {ED8E9BCF-2899-4B1C-B5AD-873EC41E34F7}.Release|Any CPU.ActiveCfg = Release|Any CPU 26 | {ED8E9BCF-2899-4B1C-B5AD-873EC41E34F7}.Release|Any CPU.Build.0 = Release|Any CPU 27 | {2439933D-E255-4E9E-BB2D-03D79B4539B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 28 | {2439933D-E255-4E9E-BB2D-03D79B4539B3}.Debug|Any CPU.Build.0 = Debug|Any CPU 29 | {2439933D-E255-4E9E-BB2D-03D79B4539B3}.Release|Any CPU.ActiveCfg = Release|Any CPU 30 | {2439933D-E255-4E9E-BB2D-03D79B4539B3}.Release|Any CPU.Build.0 = Release|Any CPU 31 | EndGlobalSection 32 | GlobalSection(SolutionProperties) = preSolution 33 | HideSolutionNode = FALSE 34 | EndGlobalSection 35 | EndGlobal 36 | -------------------------------------------------------------------------------- /PM-Dashboard/App_Start/BundleConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.Optimization; 3 | 4 | namespace PM_Dashboard 5 | { 6 | public class BundleConfig 7 | { 8 | // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725 9 | public static void RegisterBundles(BundleCollection bundles) 10 | { 11 | bundles.Add(new ScriptBundle("~/bundles/dependencies").Include( 12 | "~/Scripts/modernizr-2.8.3.min.js", 13 | "~/Scripts/jquery-1.11.2.min.js", 14 | "~/Scripts/jquery-ui-1.10.3.min.js")); 15 | 16 | bundles.Add(new ScriptBundle("~/bundles/igniteui").Include( 17 | "~/Scripts/ignite/infragistics.core.js", 18 | "~/Scripts/ignite/infragistics.lob.js", 19 | "~/Scripts/ignite/infragistics.dv.js")); 20 | 21 | bundles.Add(new ScriptBundle("~/bundles/knockout").Include( 22 | "~/Scripts/knockout-3.3.0.min.js")); 23 | 24 | bundles.Add(new StyleBundle("~/Content/css").Include( 25 | "~/Content/app.html5bp.css", 26 | "~/Content/app.css")); 27 | 28 | bundles.Add(new ScriptBundle("~/bundles/app").Include( 29 | "~/Scripts/jquery-mCustomScrollbar.3.0.8.js", 30 | "~/Scripts/app/app.utils.js", 31 | "~/Scripts/app/app.actions.js", 32 | "~/Scripts/app/app.viewmodels.js", 33 | "~/Scripts/app/app.main.js")); 34 | 35 | BundleTable.EnableOptimizations = true; 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /PM-Dashboard/App_Start/FilterConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | using System.Web.Mvc; 3 | 4 | namespace PM_Dashboard 5 | { 6 | public class FilterConfig 7 | { 8 | public static void RegisterGlobalFilters(GlobalFilterCollection filters) 9 | { 10 | filters.Add(new HandleErrorAttribute()); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /PM-Dashboard/App_Start/RouteConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Mvc; 6 | using System.Web.Routing; 7 | 8 | namespace PM_Dashboard 9 | { 10 | public class RouteConfig 11 | { 12 | public static void RegisterRoutes(RouteCollection routes) 13 | { 14 | routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 15 | 16 | routes.MapRoute( 17 | name: "Default", 18 | url: "{controller}/{action}/{id}", 19 | defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 20 | ); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.svg -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/._glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /PM-Dashboard/Content/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/._glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/._glyphicons-halflings-white.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/._glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/._glyphicons-halflings.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/._igicons-pm-opt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/._igicons-pm-opt.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/._igicons-pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/._igicons-pm.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000001.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000002.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000003.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000004.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000005.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000006.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000007.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000008.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000009.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000010.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000011.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000012.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000013.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000014.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000015.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000016.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000017.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000018.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000019.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000020.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000021.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000022.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000023.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000024.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/._0000025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/._0000025.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000001.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000002.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000003.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000004.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000005.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000006.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000007.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000008.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000009.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000010.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000011.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000012.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000013.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000014.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000015.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000016.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000017.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000018.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000019.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000020.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000021.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000022.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000023.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000024.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/employees/0000025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/employees/0000025.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/glyphicons-halflings.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/igicons-pm-opt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/igicons-pm-opt.png -------------------------------------------------------------------------------- /PM-Dashboard/Content/images/igicons-pm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Content/images/igicons-pm.png -------------------------------------------------------------------------------- /PM-Dashboard/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using PM_Dashboard.Models; 2 | using System; 3 | using System.Globalization; 4 | using System.Collections.Generic; 5 | using System.Dynamic; 6 | using System.Linq; 7 | using System.Web; 8 | using System.Web.Mvc; 9 | using Infragistics.Web.Mvc; 10 | 11 | namespace PM_Dashboard.Controllers 12 | { 13 | public class HomeController : Controller 14 | { 15 | static ResourceData data = new ResourceData(); 16 | 17 | public ActionResult Index(string returnUrl) 18 | { 19 | ViewBag.ReturnUrl = returnUrl; 20 | //data.projects = data.projects.OrderBy(project => project.status).ThenBy(project => project.project_id).ToList(); 21 | 22 | string pID = data.projects[0].project_id.ToString(); // Obtain 1st Project ID 23 | GridModel overview = new GridModel(); 24 | overview.DataSource = data.resourceOverview[pID].weeks[0].resources.AsQueryable(); 25 | 26 | overview.ID = "resource-overview-table"; 27 | overview.PrimaryKey = "employeedID"; 28 | overview.Width = "100%"; 29 | overview.AutoGenerateColumns = false; 30 | overview.AutoGenerateLayouts = false; 31 | overview.EnableHoverStyles = false; 32 | overview.AutofitLastColumn = false; 33 | 34 | GridColumn employeeIDCol = new GridColumn(); 35 | employeeIDCol.Key = "employeeID"; 36 | employeeIDCol.HeaderText = "Employee ID"; 37 | employeeIDCol.DataType = "string"; 38 | employeeIDCol.Hidden = true; 39 | 40 | GridColumn disciplineCol = new GridColumn(); 41 | disciplineCol.Key = "discipline"; 42 | disciplineCol.HeaderText = "Discipline"; 43 | disciplineCol.DataType = "string"; 44 | disciplineCol.Width = "113px"; 45 | disciplineCol.HeaderCssClass = "disciplineCol"; 46 | disciplineCol.ColumnCssClass = "disciplineCol"; 47 | disciplineCol.FormatterFunction = "formatResourceFirstCol"; 48 | 49 | overview.Columns.Add(employeeIDCol); 50 | overview.Columns.Add(disciplineCol); 51 | 52 | int wk = 1; 53 | int compareWithStartDate, compareWithEndDate; 54 | string today = "2015-07-07 12:00:00"; 55 | DateTime t1 = Convert.ToDateTime(today); 56 | DateTime sdate,edate; 57 | string sdateMonth, edateMonth, sdateDay, edateDay, curLabel; 58 | curLabel = @Resources.Main.Overview_CurrentLabel; 59 | foreach (var week in data.resourceOverview[pID].weeks) 60 | { 61 | 62 | sdate = Convert.ToDateTime(week.startDate); 63 | edate = Convert.ToDateTime(week.endDate); 64 | compareWithStartDate = DateTime.Compare(t1, sdate); 65 | compareWithEndDate = DateTime.Compare(t1, edate); 66 | 67 | sdateMonth = week.startDate.Substring(5, 2).TrimStart(new Char[] { '0' }); 68 | sdateDay = week.startDate.Substring(8, 2).TrimStart(new Char[] { '0' }); 69 | edateMonth = week.endDate.Substring(5, 2).TrimStart(new Char[] { '0' }); 70 | edateDay = week.endDate.Substring(8, 2).TrimStart(new Char[] { '0' }); 71 | GridColumn weekCol = new GridColumn(); 72 | weekCol.Key = "discipline"; 73 | if (compareWithStartDate > 0 && compareWithEndDate < 0) { 74 | weekCol.HeaderText = @"
" + sdateMonth + "/" + sdateDay + "-" + edateMonth + "/" + edateDay + " (" + curLabel + ")
"; 75 | } 76 | else 77 | { 78 | weekCol.HeaderText = @"
" + sdateMonth + "/" + sdateDay + "-" + edateMonth + "/" + edateDay + "
"; 79 | } 80 | weekCol.DataType = "string"; 81 | weekCol.Width = "113px"; 82 | weekCol.ColumnCssClass = "gaugeRow"; 83 | weekCol.Template = @"
"; 84 | 85 | overview.Columns.Add(weekCol); 86 | 87 | wk = wk + 1; 88 | } 89 | overview.AddClientEvent("rowsRendered", "app.utils.renderLinearGauge(resourceOverview['10000'])"); 90 | 91 | 92 | 93 | GridModel tasks = new GridModel(); 94 | tasks.DataSource = data.taskList[pID].tasks.AsQueryable(); 95 | 96 | tasks.ID = "project-tasks-table"; 97 | tasks.PrimaryKey = "id"; 98 | tasks.AutoGenerateColumns = false; 99 | tasks.AlternateRowStyles = false; 100 | tasks.EnableHoverStyles = true; 101 | tasks.ShowHeader = false; 102 | 103 | 104 | GridColumn taskIDCol = new GridColumn(); 105 | taskIDCol.Key = "id"; 106 | taskIDCol.HeaderText = "Task ID"; 107 | taskIDCol.DataType = "number"; 108 | taskIDCol.Hidden = true; 109 | 110 | GridColumn taskCol = new GridColumn(); 111 | taskCol.Key = "name"; 112 | taskCol.HeaderText = "Task"; 113 | taskCol.DataType = "string"; 114 | taskCol.FormatterFunction = @"function(v,r) { return ""
"" + v + "" (# "" + r.id + "")"" + Resources.TaskProjectedEndLabel + "" "" + (parseDate(r.endDate).getMonth()+1) + '/' + parseDate(r.endDate).getDate() + """" + r.hours + "" "" + Resources.TaskHoursLabel + """" + Resources.TaskHrsLabel + ""
""; }"; 115 | 116 | GridColumn flagCol = new GridColumn(); 117 | flagCol.Key = "flag"; 118 | flagCol.HeaderText = "Flag"; 119 | flagCol.DataType = "string"; 120 | flagCol.Hidden = true; 121 | 122 | GridColumn discCol = new GridColumn(); 123 | discCol.Key = "discipline"; 124 | discCol.HeaderText = "Discipline"; 125 | discCol.DataType = "string"; 126 | discCol.Hidden = true; 127 | 128 | GridColumn edateCol = new GridColumn(); 129 | edateCol.Key = "endDate"; 130 | edateCol.HeaderText = "End Date"; 131 | edateCol.DataType = "string"; 132 | edateCol.Hidden = true; 133 | 134 | GridColumn sdateCol = new GridColumn(); 135 | sdateCol.Key = "startDate"; 136 | sdateCol.HeaderText = "Start Date"; 137 | sdateCol.DataType = "string"; 138 | sdateCol.Hidden = true; 139 | 140 | GridColumn hoursCol = new GridColumn(); 141 | hoursCol.Key = "hours"; 142 | hoursCol.HeaderText = "hours"; 143 | hoursCol.DataType = "string"; 144 | hoursCol.Hidden = true; 145 | 146 | /*Add Columns*/ 147 | tasks.Columns.Add(taskIDCol); 148 | tasks.Columns.Add(taskCol); 149 | tasks.Columns.Add(flagCol); 150 | tasks.Columns.Add(discCol); 151 | tasks.Columns.Add(edateCol); 152 | tasks.Columns.Add(sdateCol); 153 | tasks.Columns.Add(hoursCol); 154 | 155 | GridColumnLayoutModel layout = new GridColumnLayoutModel(); 156 | layout.Key = "assets"; 157 | layout.AutoGenerateColumns = false; 158 | layout.EnableHoverStyles = false; 159 | layout.ShowHeader = false; 160 | 161 | GridColumn type = new GridColumn(); 162 | type.Key = "type"; 163 | type.HeaderText = "Type"; 164 | type.DataType = "string"; 165 | type.ColumnCssClass = "file-type"; 166 | type.FormatterFunction = @"function(val){return """";}"; 167 | 168 | GridColumn name = new GridColumn(); 169 | name.Key = "name"; 170 | name.HeaderText = "Assets"; 171 | name.DataType = "string"; 172 | name.ColumnCssClass = "task-name"; 173 | 174 | GridColumn url = new GridColumn(); 175 | url.Key = "url"; 176 | url.HeaderText = "URL"; 177 | url.DataType = "string"; 178 | url.FormatterFunction = @"function(val){return ""("" + Resources.TaskViewFile + "")"";}"; 179 | 180 | layout.Columns.Add(type); 181 | layout.Columns.Add(name); 182 | layout.Columns.Add(url); 183 | 184 | 185 | tasks.ColumnLayouts.Add(layout); 186 | 187 | tasks.AddClientEvent("rowsRendered", "app.utils.taskListRowsRendered()"); 188 | tasks.AddClientEvent("rowExpanding", "app.utils.taskListRowsExpanding(evt,ui)"); 189 | 190 | 191 | dynamic vm = new ExpandoObject(); 192 | vm.data = data; 193 | vm.grid = overview; 194 | vm.tasks = tasks; 195 | 196 | return View(vm); 197 | } 198 | 199 | public JsonResult GetProjectData() 200 | { 201 | return Json(data.projects, JsonRequestBehavior.AllowGet); 202 | } 203 | 204 | public JsonResult GetResourceOverviewData() 205 | { 206 | return Json(data.resourceOverview, JsonRequestBehavior.AllowGet); 207 | } 208 | 209 | public JsonResult GetEmployeesData() 210 | { 211 | return Json(data.employees, JsonRequestBehavior.AllowGet); 212 | } 213 | 214 | public JsonResult GetTaskListData() 215 | { 216 | return Json(data.taskList, JsonRequestBehavior.AllowGet); 217 | } 218 | } 219 | } -------------------------------------------------------------------------------- /PM-Dashboard/Global.asax: -------------------------------------------------------------------------------- 1 | <%@ Application Codebehind="Global.asax.cs" Inherits="PM_Dashboard.MvcApplication" Language="C#" %> 2 | -------------------------------------------------------------------------------- /PM-Dashboard/Global.asax.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Web; 5 | using System.Web.Http; 6 | using System.Web.Mvc; 7 | using System.Web.Optimization; 8 | using System.Web.Routing; 9 | 10 | namespace PM_Dashboard 11 | { 12 | // Note: For instructions on enabling IIS6 or IIS7 classic mode, 13 | // visit http://go.microsoft.com/?LinkId=9394801 14 | 15 | public class MvcApplication : System.Web.HttpApplication 16 | { 17 | protected void Application_Start() 18 | { 19 | AreaRegistration.RegisterAllAreas(); 20 | 21 | FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 22 | RouteConfig.RegisterRoutes(RouteTable.Routes); 23 | BundleConfig.RegisterBundles(BundleTable.Bundles); 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /PM-Dashboard/Images/accent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/accent.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/bullet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/bullet.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/heroAccent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/heroAccent.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/android-icon-144x144.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/android-icon-192x192.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/android-icon-36x36.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/android-icon-48x48.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/android-icon-72x72.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/android-icon-96x96.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-114x114.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-120x120.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-144x144.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-152x152.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-180x180.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-57x57.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-60x60.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-72x72.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-76x76.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-icon.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/favicon-16x16.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/favicon-32x32.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/favicon-96x96.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/ms-icon-144x144.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/ms-icon-150x150.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/ms-icon-310x310.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/icons/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/icons/ms-icon-70x70.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList0.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList1.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList2.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList3.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList4.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList5.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList6.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList7.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList8.png -------------------------------------------------------------------------------- /PM-Dashboard/Images/orderedList9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Images/orderedList9.png -------------------------------------------------------------------------------- /PM-Dashboard/Infragistics.Web.Mvc.Free.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Infragistics.Web.Mvc.Free.dll -------------------------------------------------------------------------------- /PM-Dashboard/PM-Dashboard.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | 8 | 9 | 2.0 10 | {ED8E9BCF-2899-4B1C-B5AD-873EC41E34F7} 11 | {E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} 12 | Library 13 | Properties 14 | PM_Dashboard 15 | PM-Dashboard 16 | v4.5 17 | false 18 | true 19 | 20 | 21 | 22 | 23 | SAK 24 | SAK 25 | SAK 26 | SAK 27 | ..\ 28 | true 29 | 30 | 31 | true 32 | full 33 | false 34 | bin\ 35 | DEBUG;TRACE 36 | prompt 37 | 4 38 | 39 | 40 | pdbonly 41 | true 42 | bin\ 43 | TRACE 44 | prompt 45 | 4 46 | 47 | 48 | 49 | False 50 | .\Infragistics.Web.Mvc.Free.dll 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | True 75 | ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll 76 | 77 | 78 | True 79 | ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.0\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll 80 | 81 | 82 | ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll 83 | 84 | 85 | 86 | 87 | 88 | 89 | True 90 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.Helpers.dll 91 | 92 | 93 | True 94 | ..\packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll 95 | 96 | 97 | ..\packages\Microsoft.AspNet.Web.Optimization.1.0.0\lib\net40\System.Web.Optimization.dll 98 | 99 | 100 | True 101 | ..\packages\Microsoft.AspNet.Razor.2.0.30506.0\lib\net40\System.Web.Razor.dll 102 | 103 | 104 | True 105 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.dll 106 | 107 | 108 | True 109 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Deployment.dll 110 | 111 | 112 | True 113 | ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.WebPages.Razor.dll 114 | 115 | 116 | True 117 | ..\packages\Microsoft.AspNet.WebPages.Data.2.0.30506.0\lib\net40\WebMatrix.Data.dll 118 | 119 | 120 | True 121 | ..\packages\Microsoft.AspNet.WebPages.WebData.2.0.30506.0\lib\net40\WebMatrix.WebData.dll 122 | 123 | 124 | True 125 | ..\packages\Microsoft.Data.Edm.5.2.0\lib\net40\Microsoft.Data.Edm.dll 126 | 127 | 128 | True 129 | ..\packages\Microsoft.Data.OData.5.2.0\lib\net40\Microsoft.Data.OData.dll 130 | 131 | 132 | True 133 | ..\packages\System.Spatial.5.2.0\lib\net40\System.Spatial.dll 134 | 135 | 136 | True 137 | ..\packages\WebGrease.1.3.0\lib\WebGrease.dll 138 | 139 | 140 | True 141 | ..\packages\WebGrease.1.3.0\lib\Antlr3.Runtime.dll 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | Global.asax 151 | 152 | 153 | 154 | 155 | True 156 | True 157 | Main.resx 158 | 159 | 160 | True 161 | True 162 | Main.ja.resx 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | Designer 251 | 252 | 253 | Web.config 254 | 255 | 256 | Web.config 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | Designer 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | Designer 286 | 287 | 288 | 289 | 290 | Resources 291 | PublicResXFileCodeGenerator 292 | Main.ja.Designer.cs 293 | 294 | 295 | PublicResXFileCodeGenerator 296 | Main.Designer.cs 297 | Resources 298 | 299 | 300 | 301 | 10.0 302 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | True 315 | True 316 | 63241 317 | / 318 | http://localhost:63238/ 319 | False 320 | False 321 | 322 | 323 | False 324 | 325 | 326 | 327 | 328 | 329 | 335 | -------------------------------------------------------------------------------- /PM-Dashboard/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("PM_Dashboard")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("PM_Dashboard")] 13 | [assembly: AssemblyCopyright("Copyright © 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("35fc5244-e307-4b38-9689-8343ccddce3b")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Revision and Build Numbers 33 | // by using the '*' as shown below: 34 | [assembly: AssemblyVersion("1.0.0.0")] 35 | [assembly: AssemblyFileVersion("1.0.0.0")] 36 | -------------------------------------------------------------------------------- /PM-Dashboard/Resources/Main.ja.Designer.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Resources/Main.ja.Designer.cs -------------------------------------------------------------------------------- /PM-Dashboard/Resources/Main.ja.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 割り当てられたリソース 122 | 123 | 124 | 時間 125 | 126 | 127 | : 利用可能な時間数 128 | 129 | 130 | : その他の時間数 131 | 132 | 133 | : このタスクの時間数 134 | 135 | 136 | タスク # 137 | 138 | 139 | タスクに割り当てられた人はいません。 140 | 141 | 142 | 基本予算 143 | 144 | 145 | 時間/見積もり時間 146 | 147 | 148 | 予定終了日 149 | 150 | 151 | 推定予算 152 | 153 | 154 | 予測終了日 155 | 156 | 157 | タスクの進行状況 158 | 159 | 160 | <span>現在<b>古い</b>ブラウザーが使用されているため、このアプリケーションはサポートされていません。アプリケーションを表示するには、<a href="http://browsehappy.com/" class="animate-decor-disappear">ブラウザーをアップグレード</a>してください。</span> 161 | 162 | 163 | 進行中 164 | 165 | 166 | 開始日 167 | 168 | 169 | 今日 170 | 171 | 172 | 予定 173 | 174 | 175 | プロジェクト マネージャー 176 | 177 | 178 | リソースの見積もり時間が作業可能な時間を超えています。 179 | 180 | 181 | 見積もり時間がリソースの作業可能な 40 時間を超えています。 182 | 183 | 184 | 40時間以上の超過割り当て 185 | 186 | 187 | 割り当て時間超過 188 | 189 | 190 | リソースの稼働時間が見積もり時間を超えています。 191 | 192 | 193 | リソースの実稼働時間が見積もりの 40 時間を超えています。 194 | 195 | 196 | 40時間以上の超過見積もり 197 | 198 | 199 | 見積もり時間超過 200 | 201 | 202 | チャートの見方 203 | 204 | 205 | 割り当て超過 206 | 207 | 208 | 見積もり時間超過 209 | 210 | 211 | 見積もり時間 212 | 213 | 214 | 作業時間 215 | 216 | 217 | 現在 218 | 219 | 220 | 稼働時間 vs. 見積もり時間 221 | 222 | 223 | プロジェクトの人数制限は 6 人です 224 | 225 | 226 | 読み込んでいます... 227 | 228 | 229 | プロジェクト計画 230 | 231 | 232 | プロジェクト # 233 | 234 | 235 | プロジェクト タスク 236 | 237 | 238 | 時間 239 | 240 | 241 | 時間 242 | 243 | 244 | 予定終了日 245 | 246 | 247 | ファイルを表示 248 | 249 | 250 | 選択した時間範囲に利用可能なタスクがありません。 251 | 252 | 253 | クリックしてこのリソースを追加 254 | 255 | 256 | すべてのチーム メンバー 257 | 258 | 259 | 開発 260 | 261 | 262 | プロジェクト マネジメント 263 | 264 | 265 | UX 266 | 267 | 268 | ビジュアル デザイン 269 | 270 | 271 | :利用可能な時間数 272 | 273 | 274 | プロジェクト 275 | 276 | 277 | 追加するチーム メンバーを選択してください。 278 | 279 | 280 | チーム メンバーを表示 281 | 282 | 283 | プロジェクト マネジメント ダッシュボード 284 | 285 | 286 | 業務アプリケーションでは、ここに Dropbox などの外部ストレージ サービスにあるアセットの表示やサイト内のその他のページへリンクできます。 287 | 288 | 289 | サンプル ダイアログ 290 | 291 | 292 | ワイヤーフレームの調整 293 | 294 | 295 | 面接データの分析 296 | 297 | 298 | デザイン プレビュー 299 | 300 | 301 | デザイン仕様 302 | 303 | 304 | バグの修正 305 | 306 | 307 | デザイン要素の収集と準備 308 | 309 | 310 | インタラクション ドキュメント 311 | 312 | 313 | プロトタイプの調整 314 | 315 | 316 | ミーティング メモ 317 | 318 | 319 | 面接の質問準備 320 | 321 | 322 | プロトタイプ 323 | 324 | 325 | プロジェクトの更新されたリンクの提供 326 | 327 | 328 | 面接の記録 329 | 330 | 331 | リサーチ メモ 332 | 333 | 334 | 開発リンクをプロジェクト マネジャーに送信 335 | 336 | 337 | バグ リストの更新 338 | 339 | 340 | ユーザー テストのフィードバックを保存 341 | 342 | 343 | バグのユーザー テスト 344 | 345 | 346 | ワイヤーフレーム スケッチ 347 | 348 | 349 | タスク リストの更新 350 | 351 | 352 | インタラクションの注釈 353 | 354 | 355 | バックエンド開発 356 | 357 | 358 | バックエンド開発 II 359 | 360 | 361 | デザイン リサーチ 362 | 363 | 364 | 開発 365 | 366 | 367 | 開発 II 368 | 369 | 370 | 開発 III 371 | 372 | 373 | 開発研究 374 | 375 | 376 | 開発研究 II 377 | 378 | 379 | 開発研究 III 380 | 381 | 382 | 開発研究 IV 383 | 384 | 385 | 開発研究 V 386 | 387 | 388 | 開発の完了 389 | 390 | 391 | 最終レビューと発売 392 | 393 | 394 | フロントエンド開発 395 | 396 | 397 | フロントエンド開発 II 398 | 399 | 400 | プロジェクト レビュー 401 | 402 | 403 | 関係者の面接 404 | 405 | 406 | ユーザー テスト 407 | 408 | 409 | ユーザー テストとバグ修正 410 | 411 | 412 | ユーザー テストとバグ修正 II 413 | 414 | 415 | ビジュアル デザイン 416 | 417 | 418 | ビジュアル デザイン II 419 | 420 | 421 | ワイヤーフレーム 422 | 423 | 424 | ワイヤーフレーム II 425 | 426 | -------------------------------------------------------------------------------- /PM-Dashboard/Resources/Main.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | Assigned Resources 122 | 123 | 124 | hrs available 125 | 126 | 127 | hrs other 128 | 129 | 130 | hrs this task 131 | 132 | 133 | task # 134 | 135 | 136 | Sorry, but no one has been assigned to this task. 137 | 138 | 139 | baseline budget 140 | 141 | 142 | hours/planned 143 | 144 | 145 | planned end date 146 | 147 | 148 | projected budget 149 | 150 | 151 | projected end date 152 | 153 | 154 | task progress 155 | 156 | 157 | <span>Unfortuantely, you are using an <b>outdated</b> browser and some element for this app are not supported. Please <a href="http://browsehappy.com/" class="animate-decor-disappear">upgrade your browser</a> to view.</span> 158 | 159 | 160 | current 161 | 162 | 163 | starting 164 | 165 | 166 | today 167 | 168 | 169 | upcoming 170 | 171 | 172 | Project Manager 173 | 174 | 175 | Resource has more hours planned than available 176 | 177 | 178 | Resource has more hours planned than available and is over 40 hrs 179 | 180 | 181 | Over Allocated More Than 40 hrs 182 | 183 | 184 | Over Allocated 185 | 186 | 187 | Resource has worked more than planned 188 | 189 | 190 | Resource has worked mored than planned and is over 40 hrs 191 | 192 | 193 | Over Planned hrs more than 40 hrs 194 | 195 | 196 | Over Planned hrs 197 | 198 | 199 | How To Read the Charts 200 | 201 | 202 | over allocation 203 | 204 | 205 | over planned hours 206 | 207 | 208 | planned 209 | 210 | 211 | worked 212 | 213 | 214 | Worked Hours vs. Planned Hours 215 | 216 | 217 | 6 person limit per project 218 | 219 | 220 | please wait... 221 | 222 | 223 | ProjectPlanner 224 | 225 | 226 | Proj# 227 | 228 | 229 | Project Tasks 230 | 231 | 232 | Sorry, there are no tasks available during the selected time frame. 233 | 234 | 235 | Click Again to Confirm Add 236 | 237 | 238 | All Team Members 239 | 240 | 241 | Development 242 | 243 | 244 | Project Management 245 | 246 | 247 | User Experience 248 | 249 | 250 | Visual Design 251 | 252 | 253 | hrs available 254 | 255 | 256 | projects 257 | 258 | 259 | Select Team Member To Add 260 | 261 | 262 | View Team Members 263 | 264 | 265 | Project Management Dashboard 266 | 267 | 268 | In a production app, these links can be used to show assets located on external storage services such as Dropbox or point to another location within the site. 269 | 270 | 271 | This is a Sample Application 272 | 273 | 274 | hrs 275 | 276 | 277 | current 278 | 279 | 280 | hours 281 | 282 | 283 | hrs 284 | 285 | 286 | Projected End 287 | 288 | 289 | view file 290 | 291 | 292 | Make Adjustments to Wireframe 293 | 294 | 295 | Analyze Interview Data 296 | 297 | 298 | Design Previews 299 | 300 | 301 | Design Specs 302 | 303 | 304 | Fix Bugs 305 | 306 | 307 | Gather and Prepare Initial Design elements 308 | 309 | 310 | Interaction Documentation 311 | 312 | 313 | Make Adjustments to Prototype 314 | 315 | 316 | Meeting Notes 317 | 318 | 319 | Prepare Interview Questions 320 | 321 | 322 | Prototyping 323 | 324 | 325 | Provide Updated Link of Project 326 | 327 | 328 | Record Interviews 329 | 330 | 331 | Research Notes 332 | 333 | 334 | Send Development Link to Project Manageer 335 | 336 | 337 | Update Bug Report 338 | 339 | 340 | Document Feedback from User Tests 341 | 342 | 343 | User Test for Bugs 344 | 345 | 346 | Wireframe sketches 347 | 348 | 349 | Update Task List Documentation 350 | 351 | 352 | Annotation of Interactions 353 | 354 | 355 | Back-end Development 356 | 357 | 358 | Back-end Development II 359 | 360 | 361 | Design Research 362 | 363 | 364 | Development 365 | 366 | 367 | Development II 368 | 369 | 370 | Development III 371 | 372 | 373 | Development Research 374 | 375 | 376 | Development Research II 377 | 378 | 379 | Development Research III 380 | 381 | 382 | Development Research IV 383 | 384 | 385 | Development Research V 386 | 387 | 388 | Finalize Development 389 | 390 | 391 | Final Review and Launch 392 | 393 | 394 | Front-end Development 395 | 396 | 397 | Front-end Development II 398 | 399 | 400 | Project Review 401 | 402 | 403 | Stakeholder Interviews 404 | 405 | 406 | User Testing 407 | 408 | 409 | User Testing and Fix Bugs 410 | 411 | 412 | User Testing and Fix Bugs II 413 | 414 | 415 | Visual Design 416 | 417 | 418 | Visual Design II 419 | 420 | 421 | Wireframing 422 | 423 | 424 | WireFraming II 425 | 426 | -------------------------------------------------------------------------------- /PM-Dashboard/Scripts/_references.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/Scripts/_references.js -------------------------------------------------------------------------------- /PM-Dashboard/Scripts/app/app.actions.js: -------------------------------------------------------------------------------- 1 | (function ($, app) { 2 | 3 | 'user strict'; 4 | 5 | window.app = app || {}; 6 | 7 | var actions = { 8 | filterTasks: function (columns, numColumns, tIndex) { 9 | var selectedElem = $('#resource-overview-table tr th'), 10 | taskElem = $('#project-tasks-table > tbody > tr'), 11 | selectedWkStart = selectedElem.eq(columns[0]).find('.igColHeader').attr('data-week-start'), 12 | selectedWkEnd = selectedElem.eq(columns[numColumns - 1]).find('.igColHeader').attr('data-week-end'); 13 | 14 | tIndex = tIndex || 0; 15 | 16 | // FILTER TASKS BASED ON WEEK SELECTION 17 | taskElem.filter(function () { 18 | var start = $(this).find('.taskItem').attr('data-task-start'), 19 | end = $(this).find('.taskItem').attr('data-task-end'); 20 | 21 | // Show tasks that fall within the selected range of week(s) 22 | if ((start >= selectedWkStart && start <= selectedWkEnd) || (end >= selectedWkStart && end <= selectedWkEnd) || (selectedWkStart >= start && selectedWkStart <= end && selectedWkEnd <= end && selectedWkEnd >= start)) { 23 | $(this).switchClass('hidden', 'show').show(); 24 | } else { 25 | if ($(this).prev().is(':visible') && $(this).attr('data-container') == 'true') { 26 | $(this).removeClass('hidden'); 27 | } else { 28 | // Else Hide Rows 29 | $(this).switchClass('show', 'hidden').hide(); 30 | } 31 | } 32 | 33 | return $(this); 34 | }).promise().done(function () { 35 | // Remove Selected class from all rows and add to first visible row 36 | $('.task.item').removeClass('ui-iggrid-selectedcell ui-state-active'); 37 | 38 | // If Index is 0, then collapse all rows and expand first visible row 39 | if (tIndex === 0) { 40 | if ($('.task.item.show:eq(0)').attr('state') != 'e') { 41 | $('#project-tasks-table').igHierarchicalGrid("collapse", $("#project-tasks-table tbody > tr[state=e]")); 42 | } 43 | 44 | $('.task.item.show:eq(0)').addClass('ui-iggrid-selectedcell ui-state-active'); 45 | } 46 | // Make sure current is highlighted 47 | else { 48 | $('.task.item:eq(' + tIndex + ')').addClass('ui-iggrid-selectedcell ui-state-active'); 49 | } 50 | 51 | // Show/Hide No Task Message 52 | if ($("#project-tasks-table tbody > tr.task.item.show").length < 1) { 53 | $('#tasklist-empty-msg').show(); 54 | 55 | $('#project-assignments .action.add-resource').addClass('disabled'); 56 | } else { 57 | $('#tasklist-empty-msg').hide(); 58 | } 59 | }); 60 | }, 61 | updateProjectListDoughnutChart: function (chart, status, tasksComplete, tasksTotal, init) { 62 | init = init || false; 63 | var b; 64 | switch (status.toLowerCase()) { 65 | case 'danger': 66 | b = "#FF5D43"; 67 | break; 68 | case 'warning': 69 | b = "#FBA137"; 70 | break; 71 | default: 72 | b = "#57d73a"; 73 | break; 74 | } 75 | if (!init) { 76 | chart.igDoughnutChart({ 77 | series: [{ 78 | name: "Project", 79 | labelMemberPath: "category", 80 | labelsPosition: "none", 81 | valueMemberPath: "count", 82 | brushes: [b, '#3d3d3d'], 83 | dataSource: [ 84 | { "category": "Tasks Completed", "count": ~~tasksComplete }, 85 | { "category": "Total Tasks", "count": (~~tasksTotal - ~~tasksComplete) } 86 | ] 87 | }] 88 | }); 89 | } else { 90 | chart.igDoughnutChart({ 91 | width: '100%', 92 | height: '20px', 93 | innerExtent: 60, 94 | series: [{ 95 | isSurfaceInteractionDisabled: true, 96 | name: "Project", 97 | labelMemberPath: "category", 98 | labelsPosition: "none", 99 | valueMemberPath: "count", 100 | outlines: ['#3d3d3d', '#3d3d3d'], 101 | brushes: [b, '#3d3d3d'], 102 | dataSource: [ 103 | { "category": "Tasks Completed", "count": ~~tasksComplete }, 104 | { "category": "Total Tasks", "count": (~~tasksTotal - ~~tasksComplete) } 105 | ], 106 | showTooltip: false, 107 | radiusFactor: 1, 108 | startAngle: 270 109 | }] 110 | }); 111 | } 112 | 113 | }, 114 | updateResourceAssignmentDoughnutChart: function () { 115 | 116 | var curTaskAssignCount = $('#project-assignments-list li .hours.chart').length, a = 0, n, 117 | taskItem, taskAssign, hrsOnTask, hrsOnOther, hrsFree, statusBrush, selectedHrs, 118 | hrsOnTaskVal, hrsOnOtherVal, hrsFreeVal; 119 | 120 | for (a = 0; a < curTaskAssignCount; a += 1) { 121 | 122 | taskItem = $('#project-assignments-list li:eq(' + a + ')'); 123 | taskAssign = $('#project-assignments-list li .hours.chart:eq(' + a + ')'); 124 | selectedHrs = 40; 125 | 126 | // Check to see if current task is pending change, if so, then use changed value 127 | if (taskItem.attr('data-pending-changes') == 'true') { 128 | hrsOnTask = ~~taskItem.find('.hrs-overview .hrs-on-task b').text(); 129 | hrsOnOther = ~~taskItem.find('.hrs-overview .hrs-on-other b').text(); 130 | hrsFree = ~~taskItem.find('.hrs-overview .hrs-free b').text(); 131 | } else { 132 | hrsOnTask = ~~taskAssign.attr('data-hrs-task'); 133 | hrsOnOther = Math.abs(~~taskAssign.attr('data-hrs') - hrsOnTask) + ~~taskAssign.attr('data-other'); 134 | hrsFree = selectedHrs - (hrsOnTask + hrsOnOther); 135 | } 136 | 137 | statusBrush = app.utils.getDisciplineBrush(taskItem.attr('data-discipline')); 138 | statusBrush = (hrsFree < 0) ? '#FBA137' : statusBrush; 139 | 140 | /*Set Initial Values for Chart*/ 141 | hrsOnTaskVal = (hrsOnTask < 2) ? 2 : hrsOnTask; 142 | hrsOnOtherVal = ((selectedHrs - hrsOnTaskVal) - Math.max(0, hrsFree)); 143 | hrsFreeVal = hrsFree; 144 | 145 | if ((selectedHrs - hrsOnTaskVal) < 0 || hrsOnOtherVal <= 2) { 146 | hrsOnOtherVal = 2; 147 | hrsFreeVal = hrsFreeVal - hrsOnOtherVal; 148 | if ((selectedHrs - hrsOnTaskVal) <= 1) { 149 | n = ((selectedHrs - hrsOnTaskVal) < 1) ? 2 : 0; 150 | hrsOnOtherVal = hrsOnOtherVal - (Math.abs(selectedHrs - hrsOnTaskVal) + n); 151 | } 152 | } 153 | 154 | // If Task Hours is 0 then disable subtract hours button 155 | if (~~taskItem.find('.hrs-on-task b').text() === 0) { 156 | taskItem.find('.subtract-hrs').addClass('disabled'); 157 | } 158 | 159 | taskAssign.igDoughnutChart({ 160 | width: '100%', 161 | // height: '60px', // Might need to provide a height 162 | innerExtent: 80, 163 | series: [{ 164 | isSurfaceInteractionDisabled: true, 165 | name: "Resource", 166 | labelMemberPath: "category", 167 | labelsPosition: "none", 168 | valueMemberPath: "count", 169 | outlines: [statusBrush, '#767676', '#dddddd'], 170 | brushes: [statusBrush, '#767676', '#dddddd'], 171 | dataSource: [ 172 | { "category": "Hrs On Project", "count": hrsOnTaskVal }, 173 | { "category": "Hrs On Other", "count": hrsOnOtherVal }, 174 | { "category": "Hrs Free", "count": hrsFreeVal } 175 | ], 176 | showTooltip: false, 177 | radiusFactor: 1, 178 | startAngle: 270 179 | }] 180 | }); 181 | } 182 | } 183 | }; 184 | 185 | window.app.actions = actions; 186 | 187 | }(jQuery, window.app || {})); 188 | -------------------------------------------------------------------------------- /PM-Dashboard/Scripts/app/app.viewmodels.js: -------------------------------------------------------------------------------- 1 | (function ($, app) { 2 | 'use strict'; 3 | 4 | var tempDate = app.utils.parseDate('2015-07-07 12:57:00'), // Set Fake Date for Today 5 | tempDateObj = new Date('07/07/2015 12:57:00'); 6 | 7 | 8 | var viewModels = { 9 | projectListModel: function (p) { 10 | var self = this; 11 | 12 | self.project_id = ko.observable(p.project_id); 13 | self.client_name = ko.observable(p.client_name); 14 | self.client_abbr = ko.observable(p.client_abbr); 15 | self.status = ko.observable(p.status); 16 | self.tasks_complete = ko.observable(p.tasks_complete); 17 | self.tasks_total = ko.observable(p.tasks_total); 18 | self.end_date = ko.observable(p.end_date); 19 | self.start_date = ko.observable(p.start_date); 20 | 21 | self.formatStartDate = ko.computed(function () { 22 | var parseStart = app.utils.parseDate(self.start_date()); 23 | return (parseStart.getMonth() + 1) + '/' + parseStart.getDate(); 24 | }); 25 | self.formatProjecID = ko.computed(function () { 26 | var pID = self.project_id(); 27 | return '# ' + pID; 28 | }); 29 | }, 30 | projectViewModel: function (projects) { 31 | var self = this, p = 0, sDate, eDate; 32 | self.currentProjects = ko.observableArray(); 33 | self.upcomingProjects = ko.observableArray(); 34 | var projectCount = projects.length; 35 | 36 | for (p = 0; p < projectCount; p += 1) { 37 | sDate = app.utils.parseDate(projects[p].start_date, 'yyyy/mm/dd'); 38 | eDate = app.utils.parseDate(projects[p].end_date, 'yyyy/mm/dd'); 39 | 40 | // Check if "Today's" date falls between project's start and end for current week iteration 41 | if (tempDate > sDate && tempDate < eDate) { 42 | self.currentProjects.push(new app.viewmodels.projectListModel(projects[p])); 43 | } else { 44 | self.upcomingProjects.push(new app.viewmodels.projectListModel(projects[p])); 45 | } 46 | 47 | } 48 | 49 | self.sortProjectList = function () { 50 | self.currentProjects.sort(function (a, b) { var s1 = ((a.status() === 'danger') ? 0 : ((a.status() === 'warning') ? 1 : 2)), s2 = ((b.status() === 'danger') ? 0 : ((b.status() === 'warning') ? 1 : 2)); return ((s1 > s2) ? 1 : -1); }); 51 | }; 52 | 53 | self.selectedProjectIndex = function (pID) { 54 | var i = 0, index; 55 | for (i = 0; i < self.currentProjects().length; i += 1) { 56 | if (~~self.currentProjects()[i].project_id() === ~~pID) { 57 | index = i; 58 | break; 59 | } 60 | } 61 | return index; 62 | }; 63 | 64 | self.addProject = function (p) { 65 | self.currentProjects.push(new app.viewmodels.projectListModel(p)); 66 | self.sortProjectList(); // Re-sort 67 | }; 68 | 69 | self.updateProject = function (pID, currentProject) { 70 | var index = self.selectedProjectIndex(pID); 71 | 72 | // Update Model 73 | self.currentProjects()[index].project_id(currentProject.project_id); 74 | self.currentProjects()[index].client_name(currentProject.client_name); 75 | self.currentProjects()[index].client_abbr(currentProject.client_abbr); 76 | self.currentProjects()[index].status(currentProject.status); 77 | self.currentProjects()[index].tasks_complete(currentProject.tasks_complete); 78 | self.currentProjects()[index].tasks_total(currentProject.tasks_total); 79 | self.currentProjects()[index].end_date(currentProject.end_date); 80 | self.currentProjects()[index].start_date(currentProject.start_date); 81 | 82 | // Updates Project Doughnut Chart Status 83 | app.actions.updateProjectListDoughnutChart($('.projects.current li:eq(' + index + ') .doughnut'), self.currentProjects()[index].status(), self.currentProjects()[index].tasks_complete(), self.currentProjects()[index].tasks_total()); 84 | 85 | self.sortProjectList(); // Re-sort 86 | }; 87 | 88 | self.sortProjectList(); // Sort List on Initialization 89 | }, 90 | projectDetailsViewModel: function (project) { 91 | 92 | var self = this; 93 | self.project = project; 94 | 95 | self.project_id = ko.observable(project.project_id); 96 | self.client_name = ko.observable(project.client_name); 97 | self.client_abbr = ko.observable(project.client_abbr); 98 | self.start_date = ko.observable(project.start_date); 99 | self.end_date = ko.observable(project.end_date); 100 | self.projected_end_date = ko.observable(project.projected_end_date); 101 | self.budget = ko.observable(project.budget); 102 | self.budget_projected = ko.observable(project.budget_projected); 103 | self.hours_planned = ko.observable(project.hours_planned); 104 | self.hours_worked = ko.observable(project.hours_worked); 105 | self.tasks_total = ko.observable(project.tasks_total); 106 | self.tasks_complete = ko.observable(project.tasks_complete); 107 | self.status = ko.observable(project.status); 108 | 109 | self.hrsCompletePercent = ko.computed(function () { 110 | var temp = Math.round((~~self.hours_worked() / ~~self.hours_planned()) * 100); 111 | return '(' + ((temp >= 0) ? temp : 0) + '%)'; 112 | }); 113 | self.tasksCompletePercent = ko.computed(function () { 114 | var temp = Math.round((~~self.tasks_complete() / ~~self.tasks_total()) * 100); 115 | return '(' + ((temp >= 0) ? temp : 0) + '%)'; 116 | }); 117 | 118 | self.end_date_format = ko.computed(function () { 119 | var e = app.utils.parseDate(self.end_date()); 120 | return (e.getMonth() + 1) + '/' + e.getDate() + '/' + e.getFullYear(); 121 | }); 122 | self.projected_end_date_format = ko.computed(function () { 123 | var e = app.utils.parseDate(self.projected_end_date()); 124 | return (e.getMonth() + 1) + '/' + e.getDate() + '/' + e.getFullYear(); 125 | }); 126 | 127 | self.budget_format = function (b) { 128 | if (typeof (b) === 'function') { return "$ " + b().toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } 129 | }; 130 | self.budget_projected_format = function (b) { 131 | if (typeof (b) === 'function') { return "$ " + b().toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); } 132 | }; 133 | 134 | $('#project-panel').attr('data-projectID', self.project_id()); 135 | 136 | self.updateProjDetailsDisplay = function (p) { 137 | self.project_id(p.project_id); 138 | self.client_name(p.client_name); 139 | self.client_abbr(p.client_abbr); 140 | self.start_date(p.start_date); 141 | self.end_date(p.end_date); 142 | self.projected_end_date(p.projected_end_date); 143 | self.budget(p.budget); 144 | self.budget_projected(p.budget_projected); 145 | self.hours_planned(p.hours_planned); 146 | self.hours_worked(p.hours_worked); 147 | self.tasks_total(p.tasks_total); 148 | self.tasks_complete(p.tasks_complete); 149 | self.status(p.status); 150 | }; 151 | }, 152 | AssignmentResourceListModel: function (employee, task, changeBool, addBool, newBool) { 153 | var self = this; 154 | 155 | self.id = employee.id; 156 | self.name = employee.name; 157 | self.discipline = Resources.Disciplines[employee.discipline.toLowerCase().replace(" ", "")]; 158 | self.disciplineCls = employee.discipline; 159 | self.email = employee.email; 160 | self.phone = employee.phone; 161 | 162 | self.pending_changes = ko.observable(changeBool); 163 | self.addition_changes = ko.observable(addBool); 164 | self.addition_new = ko.observable(newBool); 165 | 166 | self.task_end_date = task.end_date; 167 | self.task_start_date = task.start_date; 168 | self.project_id = task.project_id; 169 | self.task_id = task.task_id; 170 | self.hrs_on_task = ko.observable(task.hrs_on_task); 171 | self.hrs_on_project = ko.observable(task.hrs_on_project); 172 | self.hrs_on_other = ko.observable(task.hrs_on_other); 173 | 174 | var sDate = app.utils.parseDate(self.task_start_date, 'yyyy/mm/dd'); 175 | var eDate = app.utils.parseDate(self.task_end_date, 'yyyy/mm/dd'); 176 | 177 | self.pastWeek = ko.computed(function () { 178 | return sDate < tempDate && eDate < tempDate; 179 | }); 180 | 181 | self.status = ko.computed(function () { 182 | return ((self.hrs_on_project() + self.hrs_on_other()) > 40) ? 'warning' : 'ok'; 183 | }); 184 | 185 | self.disciplineClass = ko.computed(function () { 186 | return self.disciplineCls.toLowerCase().replace(/\s/g, '-'); 187 | }); 188 | 189 | self.hrs_all_other = ko.computed(function () { 190 | return self.hrs_on_other() + (self.hrs_on_project() - self.hrs_on_task()); 191 | }); 192 | 193 | self.hrs_free = ko.computed(function () { 194 | return 40 - (self.hrs_on_project() + self.hrs_on_other()); 195 | }); 196 | }, 197 | AssignmentResourceViewModel: function (employees, pID) { 198 | var self = this; 199 | self.tasks = ko.observableArray(); 200 | self.currentFilter = ko.observable(); 201 | 202 | // Get Project Tasks by looping through employees 203 | self.generateList = function (e, id) { 204 | id = id || pID; 205 | var numEmployeed = employees.length, ar = 0, arlm = 0, t; 206 | self.tasks.destroyAll(); // Empty existing observable 207 | self.currentFilter = ko.observable(); // Clears filter 208 | 209 | for (ar = 0; ar < numEmployeed; ar += 1) { 210 | arlm = 0; 211 | 212 | // Filter tasks by current project 213 | t = e[ar].tasks.filter(function (obj) { return ~~obj.project_id === ~~id; }); 214 | 215 | // Loop through filtered tasks for employee 216 | for (arlm = 0; arlm < t.length; arlm += 1) { 217 | self.tasks.push(new app.viewmodels.AssignmentResourceListModel({ 218 | "id": e[ar].employee_id, 219 | "name": e[ar].name, 220 | "discipline": e[ar].discipline, 221 | "email": e[ar].email, 222 | "phone": e[ar].phone 223 | }, t[arlm], 'false', false, false)); 224 | } 225 | 226 | } 227 | self.sortTaskList(); // Sort List 228 | }; 229 | 230 | self.addResourceAssignment = function (e, t, newAddBool) { 231 | self.tasks.push(new app.viewmodels.AssignmentResourceListModel(e, t, 'true', true, newAddBool)); 232 | self.sortTaskList(); // Sort Assignment List 233 | }; 234 | 235 | self.removeResourceAssignment = function (pID, tID, eID) { 236 | self.tasks.remove(function (task) { 237 | return (~~task.id === ~~eID && ~~task.task_id === ~~tID && ~~task.project_id === ~~pID); 238 | }); 239 | }; 240 | 241 | self.sortTaskList = function () { 242 | self.tasks.sort(function (a, b) { return (a.discipline.toLowerCase() > b.discipline.toLowerCase()) ? 1 : -1; }); 243 | }; 244 | 245 | 246 | self.filterTasks = ko.computed(function () { 247 | if (!self.currentFilter()) { 248 | return self.tasks(); 249 | } else { 250 | return ko.utils.arrayFilter(self.tasks(), function (task) { 251 | return ~~task.task_id === ~~self.currentFilter(); 252 | }); 253 | } 254 | }); 255 | 256 | self.filter = function (id) { 257 | id = (typeof id === 'undefined') ? '0' : id; // Checkpoint to see if ID was passed, else default to 0 258 | self.currentFilter(id); 259 | }; 260 | 261 | self.updateDoughnutChart = function () { 262 | app.actions.updateResourceAssignmentDoughnutChart(); 263 | }; 264 | 265 | 266 | // Initialize List 267 | self.generateList(employees, pID); 268 | self.sortTaskList(); // Sort Assignment List 269 | }, 270 | EmployeeDirectoryModel: function (employee) { 271 | var self = this; 272 | self.id = employee.employee_id; 273 | self.name = employee.name; 274 | self.discipline = Resources.Disciplines[employee.discipline.toLowerCase().replace(" ", "")]; 275 | self.disciplineCls = employee.discipline; 276 | self.email = employee.email; 277 | self.phone = employee.phone; 278 | self.projects = ko.observableArray(employee.projects); 279 | 280 | self.is_disabled = ko.observable(false); 281 | 282 | self.disciplineClass = ko.computed(function () { 283 | return self.disciplineCls.toLowerCase().replace(/\s/g, '-'); 284 | }); 285 | 286 | self.assigned_projects = ko.computed(function () { 287 | return self.projects().length; 288 | }); 289 | 290 | var cEnd = $('#project-tasks-table tr:visible:eq(0) .taskItem').attr('data-task-end'); // availability; 291 | self.availability = ko.observableArray(employee.tasks.filter(function (t) { 292 | return t.end_date == cEnd && t.project_id == $('#project-panel').attr('data-projectid'); 293 | })); 294 | 295 | self.hours_project = ko.computed(function () { 296 | var a = self.availability().filter(function (t) { 297 | return t.project_id == $('#headline').attr('data-projectid'); 298 | }); 299 | 300 | return (a.length > 0) ? (a[0].hrs_on_project) : 0; 301 | }); 302 | self.hours_other = ko.computed(function () { 303 | return (self.availability().length > 0) ? (self.availability()[0].hrs_total - self.hours_project()) : 0; 304 | }); 305 | 306 | self.hours_available = ko.computed(function () { 307 | return (self.availability().length > 0) ? (40 - (self.hours_other() + self.hours_project())) : 40; 308 | }); 309 | }, 310 | EmployeeDirectoryViewModel: function (employees) { 311 | var self = this, numEmployees = employees.length, e = 0; 312 | self.employees = ko.observableArray(); 313 | 314 | for (e = 0; e < numEmployees; e += 1) { 315 | self.employees.push(new app.viewmodels.EmployeeDirectoryModel(employees[e])); 316 | } 317 | 318 | self.updateAvailability = function (emp, idx) { 319 | idx = idx || 0; 320 | var cEnd = $('#project-tasks-table tr.task.item:visible:eq(' + idx + ') .taskItem').attr('data-task-end'); 321 | numEmployees = emp.length; 322 | 323 | for (e = 0; e < numEmployees; e += 1) { 324 | // Update # of Projects 325 | if (emp[e].projects.length > 0) { 326 | self.employees()[e].projects(emp[e].projects); 327 | } 328 | else { self.employees()[e].projects([]); } 329 | 330 | self.employees()[e].availability(emp[e].tasks.filter(function (t) { 331 | return t.end_date == cEnd; 332 | })); 333 | } 334 | }; 335 | } 336 | }; 337 | 338 | window.app.viewmodels = viewModels; 339 | 340 | }(jQuery, window.app || {})); 341 | -------------------------------------------------------------------------------- /PM-Dashboard/Scripts/i18n/locale-en.js: -------------------------------------------------------------------------------- 1 | // JavaScript source code 2 | var Resources = Resources || {}; 3 | 4 | Resources = { 5 | TaskProjectedEndLabel: "Projected End", 6 | TaskHoursLabel: "hours", 7 | TaskHrsLabel: "hrs", 8 | TaskViewFile: "view file", 9 | OverviewCurLabel: "current", 10 | Disciplines: { 11 | visualdesign: "visual design", 12 | userexperience: "user experience", 13 | projectmanagement: "project management", 14 | development: "development" 15 | }, 16 | OverviewLabels: { 17 | visualdesign: "visual design", 18 | userexperience: "user experience", 19 | projectmanagement: "management", 20 | development: "development" 21 | } 22 | }; -------------------------------------------------------------------------------- /PM-Dashboard/Scripts/i18n/locale-ja.js: -------------------------------------------------------------------------------- 1 | // JavaScript source code 2 | var Resources = Resources || {}; 3 | 4 | Resources = { 5 | TaskProjectedEndLabel: "見積もり終了日", 6 | TaskHoursLabel: "時間", 7 | TaskHrsLabel: "時間", 8 | TaskViewFile: "ファイルを表示", 9 | OverviewCurLabel: "現在", 10 | Disciplines: { 11 | visualdesign: "ビジュアル デザイン", 12 | userexperience: "ユーザー エクスペリエンス", 13 | projectmanagement: "プロジェクト マネジメント", 14 | development: "開発" 15 | }, 16 | OverviewLabels: { 17 | visualdesign: "ビジュアル デザイン", 18 | userexperience: "ユーザー エクスペリエンス", 19 | projectmanagement: "マネジメント", 20 | development: "開発" 21 | } 22 | }; -------------------------------------------------------------------------------- /PM-Dashboard/Scripts/modernizr-2.8.3.min.js: -------------------------------------------------------------------------------- 1 | /*! Modernizr v2.8.3 www.modernizr.com 2 | * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton 3 | * Available under the BSD and MIT licenses: www.modernizr.com/license/ 4 | */ 5 | window.Modernizr = function (e, t, n) { function r(e) { b.cssText = e } function o(e, t) { return r(S.join(e + ";") + (t || "")) } function a(e, t) { return typeof e === t } function i(e, t) { return !!~("" + e).indexOf(t) } function c(e, t) { for (var r in e) { var o = e[r]; if (!i(o, "-") && b[o] !== n) return "pfx" == t ? o : !0 } return !1 } function s(e, t, r) { for (var o in e) { var i = t[e[o]]; if (i !== n) return r === !1 ? e[o] : a(i, "function") ? i.bind(r || t) : i } return !1 } function u(e, t, n) { var r = e.charAt(0).toUpperCase() + e.slice(1), o = (e + " " + k.join(r + " ") + r).split(" "); return a(t, "string") || a(t, "undefined") ? c(o, t) : (o = (e + " " + T.join(r + " ") + r).split(" "), s(o, t, n)) } function l() { p.input = function (n) { for (var r = 0, o = n.length; o > r; r++) j[n[r]] = !!(n[r] in E); return j.list && (j.list = !(!t.createElement("datalist") || !e.HTMLDataListElement)), j }("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")), p.inputtypes = function (e) { for (var r, o, a, i = 0, c = e.length; c > i; i++) E.setAttribute("type", o = e[i]), r = "text" !== E.type, r && (E.value = x, E.style.cssText = "position:absolute;visibility:hidden;", /^range$/.test(o) && E.style.WebkitAppearance !== n ? (g.appendChild(E), a = t.defaultView, r = a.getComputedStyle && "textfield" !== a.getComputedStyle(E, null).WebkitAppearance && 0 !== E.offsetHeight, g.removeChild(E)) : /^(search|tel)$/.test(o) || (r = /^(url|email)$/.test(o) ? E.checkValidity && E.checkValidity() === !1 : E.value != x)), P[e[i]] = !!r; return P }("search tel url email datetime date month week time datetime-local number range color".split(" ")) } var d, f, m = "2.8.3", p = {}, h = !0, g = t.documentElement, v = "modernizr", y = t.createElement(v), b = y.style, E = t.createElement("input"), x = ":)", w = {}.toString, S = " -webkit- -moz- -o- -ms- ".split(" "), C = "Webkit Moz O ms", k = C.split(" "), T = C.toLowerCase().split(" "), N = { svg: "http://www.w3.org/2000/svg" }, M = {}, P = {}, j = {}, $ = [], D = $.slice, F = function (e, n, r, o) { var a, i, c, s, u = t.createElement("div"), l = t.body, d = l || t.createElement("body"); if (parseInt(r, 10)) for (; r--;) c = t.createElement("div"), c.id = o ? o[r] : v + (r + 1), u.appendChild(c); return a = ["­", '"].join(""), u.id = v, (l ? u : d).innerHTML += a, d.appendChild(u), l || (d.style.background = "", d.style.overflow = "hidden", s = g.style.overflow, g.style.overflow = "hidden", g.appendChild(d)), i = n(u, e), l ? u.parentNode.removeChild(u) : (d.parentNode.removeChild(d), g.style.overflow = s), !!i }, z = function (t) { var n = e.matchMedia || e.msMatchMedia; if (n) return n(t) && n(t).matches || !1; var r; return F("@media " + t + " { #" + v + " { position: absolute; } }", function (t) { r = "absolute" == (e.getComputedStyle ? getComputedStyle(t, null) : t.currentStyle).position }), r }, A = function () { function e(e, o) { o = o || t.createElement(r[e] || "div"), e = "on" + e; var i = e in o; return i || (o.setAttribute || (o = t.createElement("div")), o.setAttribute && o.removeAttribute && (o.setAttribute(e, ""), i = a(o[e], "function"), a(o[e], "undefined") || (o[e] = n), o.removeAttribute(e))), o = null, i } var r = { select: "input", change: "input", submit: "form", reset: "form", error: "img", load: "img", abort: "img" }; return e }(), L = {}.hasOwnProperty; f = a(L, "undefined") || a(L.call, "undefined") ? function (e, t) { return t in e && a(e.constructor.prototype[t], "undefined") } : function (e, t) { return L.call(e, t) }, Function.prototype.bind || (Function.prototype.bind = function (e) { var t = this; if ("function" != typeof t) throw new TypeError; var n = D.call(arguments, 1), r = function () { if (this instanceof r) { var o = function () { }; o.prototype = t.prototype; var a = new o, i = t.apply(a, n.concat(D.call(arguments))); return Object(i) === i ? i : a } return t.apply(e, n.concat(D.call(arguments))) }; return r }), M.flexbox = function () { return u("flexWrap") }, M.flexboxlegacy = function () { return u("boxDirection") }, M.canvas = function () { var e = t.createElement("canvas"); return !(!e.getContext || !e.getContext("2d")) }, M.canvastext = function () { return !(!p.canvas || !a(t.createElement("canvas").getContext("2d").fillText, "function")) }, M.webgl = function () { return !!e.WebGLRenderingContext }, M.touch = function () { var n; return "ontouchstart" in e || e.DocumentTouch && t instanceof DocumentTouch ? n = !0 : F(["@media (", S.join("touch-enabled),("), v, ")", "{#modernizr{top:9px;position:absolute}}"].join(""), function (e) { n = 9 === e.offsetTop }), n }, M.geolocation = function () { return "geolocation" in navigator }, M.postmessage = function () { return !!e.postMessage }, M.websqldatabase = function () { return !!e.openDatabase }, M.indexedDB = function () { return !!u("indexedDB", e) }, M.hashchange = function () { return A("hashchange", e) && (t.documentMode === n || t.documentMode > 7) }, M.history = function () { return !(!e.history || !history.pushState) }, M.draganddrop = function () { var e = t.createElement("div"); return "draggable" in e || "ondragstart" in e && "ondrop" in e }, M.websockets = function () { return "WebSocket" in e || "MozWebSocket" in e }, M.rgba = function () { return r("background-color:rgba(150,255,150,.5)"), i(b.backgroundColor, "rgba") }, M.hsla = function () { return r("background-color:hsla(120,40%,100%,.5)"), i(b.backgroundColor, "rgba") || i(b.backgroundColor, "hsla") }, M.multiplebgs = function () { return r("background:url(https://),url(https://),red url(https://)"), /(url\s*\(.*?){3}/.test(b.background) }, M.backgroundsize = function () { return u("backgroundSize") }, M.borderimage = function () { return u("borderImage") }, M.borderradius = function () { return u("borderRadius") }, M.boxshadow = function () { return u("boxShadow") }, M.textshadow = function () { return "" === t.createElement("div").style.textShadow }, M.opacity = function () { return o("opacity:.55"), /^0.55$/.test(b.opacity) }, M.cssanimations = function () { return u("animationName") }, M.csscolumns = function () { return u("columnCount") }, M.cssgradients = function () { var e = "background-image:", t = "gradient(linear,left top,right bottom,from(#9f9),to(white));", n = "linear-gradient(left top,#9f9, white);"; return r((e + "-webkit- ".split(" ").join(t + e) + S.join(n + e)).slice(0, -e.length)), i(b.backgroundImage, "gradient") }, M.cssreflections = function () { return u("boxReflect") }, M.csstransforms = function () { return !!u("transform") }, M.csstransforms3d = function () { var e = !!u("perspective"); return e && "webkitPerspective" in g.style && F("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}", function (t) { e = 9 === t.offsetLeft && 3 === t.offsetHeight }), e }, M.csstransitions = function () { return u("transition") }, M.fontface = function () { var e; return F('@font-face {font-family:"font";src:url("https://")}', function (n, r) { var o = t.getElementById("smodernizr"), a = o.sheet || o.styleSheet, i = a ? a.cssRules && a.cssRules[0] ? a.cssRules[0].cssText : a.cssText || "" : ""; e = /src/i.test(i) && 0 === i.indexOf(r.split(" ")[0]) }), e }, M.generatedcontent = function () { var e; return F(["#", v, "{font:0/0 a}#", v, ':after{content:"', x, '";visibility:hidden;font:3px/1 a}'].join(""), function (t) { e = t.offsetHeight >= 3 }), e }, M.video = function () { var e = t.createElement("video"), n = !1; try { (n = !!e.canPlayType) && (n = new Boolean(n), n.ogg = e.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, ""), n.h264 = e.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/, ""), n.webm = e.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/, "")) } catch (r) { } return n }, M.audio = function () { var e = t.createElement("audio"), n = !1; try { (n = !!e.canPlayType) && (n = new Boolean(n), n.ogg = e.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), n.mp3 = e.canPlayType("audio/mpeg;").replace(/^no$/, ""), n.wav = e.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""), n.m4a = (e.canPlayType("audio/x-m4a;") || e.canPlayType("audio/aac;")).replace(/^no$/, "")) } catch (r) { } return n }, M.localstorage = function () { try { return localStorage.setItem(v, v), localStorage.removeItem(v), !0 } catch (e) { return !1 } }, M.sessionstorage = function () { try { return sessionStorage.setItem(v, v), sessionStorage.removeItem(v), !0 } catch (e) { return !1 } }, M.webworkers = function () { return !!e.Worker }, M.applicationcache = function () { return !!e.applicationCache }, M.svg = function () { return !!t.createElementNS && !!t.createElementNS(N.svg, "svg").createSVGRect }, M.inlinesvg = function () { var e = t.createElement("div"); return e.innerHTML = "", (e.firstChild && e.firstChild.namespaceURI) == N.svg }, M.smil = function () { return !!t.createElementNS && /SVGAnimate/.test(w.call(t.createElementNS(N.svg, "animate"))) }, M.svgclippaths = function () { return !!t.createElementNS && /SVGClipPath/.test(w.call(t.createElementNS(N.svg, "clipPath"))) }; for (var H in M) f(M, H) && (d = H.toLowerCase(), p[d] = M[H](), $.push((p[d] ? "" : "no-") + d)); return p.input || l(), p.addTest = function (e, t) { if ("object" == typeof e) for (var r in e) f(e, r) && p.addTest(r, e[r]); else { if (e = e.toLowerCase(), p[e] !== n) return p; t = "function" == typeof t ? t() : t, "undefined" != typeof h && h && (g.className += " " + (t ? "" : "no-") + e), p[e] = t } return p }, r(""), y = E = null, function (e, t) { function n(e, t) { var n = e.createElement("p"), r = e.getElementsByTagName("head")[0] || e.documentElement; return n.innerHTML = "x", r.insertBefore(n.lastChild, r.firstChild) } function r() { var e = y.elements; return "string" == typeof e ? e.split(" ") : e } function o(e) { var t = v[e[h]]; return t || (t = {}, g++, e[h] = g, v[g] = t), t } function a(e, n, r) { if (n || (n = t), l) return n.createElement(e); r || (r = o(n)); var a; return a = r.cache[e] ? r.cache[e].cloneNode() : p.test(e) ? (r.cache[e] = r.createElem(e)).cloneNode() : r.createElem(e), !a.canHaveChildren || m.test(e) || a.tagUrn ? a : r.frag.appendChild(a) } function i(e, n) { if (e || (e = t), l) return e.createDocumentFragment(); n = n || o(e); for (var a = n.frag.cloneNode(), i = 0, c = r(), s = c.length; s > i; i++) a.createElement(c[i]); return a } function c(e, t) { t.cache || (t.cache = {}, t.createElem = e.createElement, t.createFrag = e.createDocumentFragment, t.frag = t.createFrag()), e.createElement = function (n) { return y.shivMethods ? a(n, e, t) : t.createElem(n) }, e.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + r().join().replace(/[\w\-]+/g, function (e) { return t.createElem(e), t.frag.createElement(e), 'c("' + e + '")' }) + ");return n}")(y, t.frag) } function s(e) { e || (e = t); var r = o(e); return !y.shivCSS || u || r.hasCSS || (r.hasCSS = !!n(e, "article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")), l || c(e, r), e } var u, l, d = "3.7.0", f = e.html5 || {}, m = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i, p = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i, h = "_html5shiv", g = 0, v = {}; !function () { try { var e = t.createElement("a"); e.innerHTML = "", u = "hidden" in e, l = 1 == e.childNodes.length || function () { t.createElement("a"); var e = t.createDocumentFragment(); return "undefined" == typeof e.cloneNode || "undefined" == typeof e.createDocumentFragment || "undefined" == typeof e.createElement }() } catch (n) { u = !0, l = !0 } }(); var y = { elements: f.elements || "abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video", version: d, shivCSS: f.shivCSS !== !1, supportsUnknownElements: l, shivMethods: f.shivMethods !== !1, type: "default", shivDocument: s, createElement: a, createDocumentFragment: i }; e.html5 = y, s(t) }(this, t), p._version = m, p._prefixes = S, p._domPrefixes = T, p._cssomPrefixes = k, p.mq = z, p.hasEvent = A, p.testProp = function (e) { return c([e]) }, p.testAllProps = u, p.testStyles = F, p.prefixed = function (e, t, n) { return t ? u(e, t, n) : u(e, "pfx") }, g.className = g.className.replace(/(^|\s)no-js(\s|$)/, "$1$2") + (h ? " js " + $.join(" ") : ""), p }(this, this.document); -------------------------------------------------------------------------------- /PM-Dashboard/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | @using Infragistics.Web.Mvc; 2 | 3 | @model dynamic 4 | 5 | @{ 6 | ViewBag.Title = @Resources.Main.Title; 7 | var currentProject = @Model.data.projects[0]; 8 | } 9 | 10 | 28 | 29 | 38 | 39 | 40 |
41 | 90 | 91 | 92 |
93 |
94 | 95 |

projectplanner

96 |
/@Resources.Main.PM_Headline_Proj:
97 | 98 |
99 | 100 |
101 |

Project Details

102 |
103 | @Resources.Main.Details_BaselineBudget 104 | 0.00 105 |
106 |
107 | @Resources.Main.Details_ProjectedBudget 108 | 0.00 109 |
110 |
111 | @Resources.Main.Details_HoursPlanned 112 | --/-- (--%) 113 |
114 |
115 | @Resources.Main.Details_TaskProgress 116 | --/-- (--%) 117 |
118 |
119 | @Resources.Main.Details_PlannedEndDate 120 | --/--/---- 121 |
122 |
123 | @Resources.Main.Details_ProjectedEndDate 124 | --/--/---- 125 |
126 |
127 | 128 | 129 |
130 |
131 |

@Resources.Main.Overview_Title (@Resources.Main.Overview_Warning)

132 |
133 |
134 | @Resources.Main.OverviewLegend_Worked 135 | @Resources.Main.OverviewLegend_Planned 136 |
137 | 138 | @Resources.Main.OverviewLegend_OverPlanned 139 | @Resources.Main.OverviewLegend_OverAllocated 140 | 141 | 142 |
143 |
144 | 145 | @(Html.Infragistics().Grid(Model.grid)) 146 |
147 |

@Resources.Main.OverviewLegendHelp_Title

148 | 149 |
    150 |
  • 151 |
    152 |

    @Resources.Main.OverviewLegendHelp_OverAllocatedTitle

    153 |

    @Resources.Main.OverviewLegendHelp_OverAllocatedDesc

    154 |
    155 | 156 |
  • 157 |
  • 158 |
    159 |

    @Resources.Main.OverviewLegendHelp_OverPlannedTitle

    160 |

    @Resources.Main.OverviewLegendHelp_OverPlannedDesc

    161 |
    162 | 163 |
  • 164 |
  • 165 |
    166 |

    @Resources.Main.OverviewLegendHelp_OverAllocatedMoreTitle

    167 |

    @Resources.Main.OverviewLegendHelp_OverAllocatedMoreDesc

    168 |
    169 | +10 170 |
  • 171 |
  • 172 |
    173 |

    @Resources.Main.OverviewLegendHelp_OverPlannedMoreTitle

    174 |

    @Resources.Main.OverviewLegendHelp_OverPlannedMoreDesc

    175 |
    176 | +10 177 |
  • 178 |
179 |
180 |
181 | 182 | 183 | 184 |
185 |
186 |

@Resources.Main.ProjectTasks

187 | 190 | 191 | @(Html.Infragistics().Grid(Model.tasks)) 192 |
193 |
194 |
195 |

@Resources.Main.AssignedResources

196 |
    197 |
  • 198 |
  • 199 |
  • 200 |
201 |
202 | 203 |
204 | 205 | 208 | 209 | 210 |
    211 | 212 | 213 |
  • 214 |
    215 | 216 | 217 |
    218 | 219 | 220 |
    221 |
    222 |
    223 |
    224 | 225 | 226 | 227 |
    228 |
    229 |
    40@Resources.Main.AssignedResources_Chart_Hrs
    230 |
    231 |
    232 |
    233 | 234 | 235 |
    236 |
    237 | @Resources.Main.AssignedResources_HrsTask 238 | @Resources.Main.AssignedResources_HrsOther 239 | @Resources.Main.AssignedResources_HrsAvailable 240 |
    241 |
    242 | 243 |
  • 244 | 245 |
246 | 247 |
248 |
249 |
250 | 251 |
252 | 253 | 254 | 291 | 292 | 293 |
294 | 295 | 304 | 305 | 316 | 317 | @{ 318 | if (File.Exists(Server.MapPath("~/scripts/i18n/locale-" + UICulture.Split('-')[0] + ".js"))) 319 | { 320 | 321 | } 322 | else 323 | { 324 | 325 | } 326 | } -------------------------------------------------------------------------------- /PM-Dashboard/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @model System.Web.Mvc.HandleErrorInfo 2 | 3 | @{ 4 | ViewBag.Title = "Error"; 5 | } 6 | 7 |
8 |

Error.

9 |

An error occurred while processing your request.

10 |
11 | -------------------------------------------------------------------------------- /PM-Dashboard/Views/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | @ViewBag.Title - My ASP.NET MVC Application 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | @Styles.Render("~/Content/css") 37 | 38 | 39 | @Scripts.Render("~/bundles/dependencies") 40 | 41 | 48 | 53 | 56 | 57 | 58 | @RenderBody() 59 | 60 | @Scripts.Render("~/bundles/igniteui") 61 | @Scripts.Render("~/bundles/knockout") 62 | @Scripts.Render("~/bundles/app") 63 | @RenderSection("scripts", required: false) 64 | 65 | 66 | -------------------------------------------------------------------------------- /PM-Dashboard/Views/Web.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 |
7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 40 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /PM-Dashboard/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_Layout.cshtml"; 3 | } -------------------------------------------------------------------------------- /PM-Dashboard/Web.Debug.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 17 | 18 | 29 | 30 | -------------------------------------------------------------------------------- /PM-Dashboard/Web.Release.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 17 | 18 | 19 | 30 | 31 | -------------------------------------------------------------------------------- /PM-Dashboard/Web.config: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /PM-Dashboard/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /PM-Dashboard/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/IgniteUI/project-management-dashboard-sample/be6b5aa3a192fb3318ceaf364f98204e788ad3c8/PM-Dashboard/favicon.ico -------------------------------------------------------------------------------- /PM-Dashboard/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/Images/icons/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/Images/icons/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/Images/icons/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/Images/icons/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/Images/icons/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/Images/icons/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /PM-Dashboard/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ignite UI Project Management Dashboard Sample 2 | 3 | ![](http://igniteui.com/images/marketing/app-samples/project-management-dashboard-sample.png) 4 | 5 | The Project Management Dashboard sample showcases Ignite UI controls like the [doughnut chart](http://igniteui.com/doughnut-chart/overview) and the [hierarchical grid](http://igniteui.com/hierarchical-grid/overview) to represent task progress and time allocation. This sample even combines the [grid](http://igniteui.com/grid/overview) and [linear gauge](http://igniteui.com/linear-gauge/overview) to help users easily identify risks and adjust project plans accordingly. 6 | 7 | ### [http://igniteui.com/project-management-dashboard-sample](http://igniteui.com/project-management-dashboard-sample) 8 | 9 | 10 | ##What is Ignite UI? 11 | [![Ignite UI Logo](http://infragistics-blogs.github.io/github-assets/logos/igniteui.png)](http://igniteui.com) 12 | 13 | [Ignite UI](http://igniteui.com/) is an advanced HTML5+ toolset that helps you create stunning, modern Web apps. Building on jQuery and jQuery UI, it primarily consists of feature rich, high-performing UI controls/widgets such as all kinds of charts, data visualization maps, (hierarchical, editable) data grids, pivot grids, enhanced editors (combo box, masked editors, HTML editor, date picker, to name a few), flexible data source connectors, and a whole lot more. Too many to list here - check out [the site](http://igniteui.com/) for more info and to [download](https://igniteui.com/download) a trial. 14 | 15 | Ignite UI is not just another library created in someone's free time. It is commercial-ready, extremely well-tested, tuned for top performance, designed for good UX, and backed by [Infragistics](http://www.infragistics.com/), an experience-focused company with a track record of over 24 years of experience in providing enterprise-ready, high-performance user interface tools for web, windows and mobile environments. 16 | 17 | [![Infragistics Logo](http://infragistics-blogs.github.io/github-assets/logos/infragistics.png)](http://infragistics.com) 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /packages/repositories.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | --------------------------------------------------------------------------------