| @@ -0,0 +1,126 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <root> | ||
| <!-- | ||
| Microsoft ResX Schema | ||
| Version 2.0 | ||
| The primary goals of this format is to allow a simple XML format | ||
| that is mostly human readable. The generation and parsing of the | ||
| various data types are done through the TypeConverter classes | ||
| associated with the data types. | ||
| Example: | ||
| ... ado.net/XML headers & schema ... | ||
| <resheader name="resmimetype">text/microsoft-resx</resheader> | ||
| <resheader name="version">2.0</resheader> | ||
| <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||
| <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||
| <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||
| <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||
| <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||
| <value>[base64 mime encoded serialized .NET Framework object]</value> | ||
| </data> | ||
| <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||
| <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||
| <comment>This is a comment</comment> | ||
| </data> | ||
| There are any number of "resheader" rows that contain simple | ||
| name/value pairs. | ||
| Each data row contains a name, and value. The row also contains a | ||
| type or mimetype. Type corresponds to a .NET class that support | ||
| text/value conversion through the TypeConverter architecture. | ||
| Classes that don't support this are serialized and stored with the | ||
| mimetype set. | ||
| The mimetype is used for serialized objects, and tells the | ||
| ResXResourceReader how to depersist the object. This is currently not | ||
| extensible. For a given mimetype the value must be set accordingly: | ||
| Note - application/x-microsoft.net.object.binary.base64 is the format | ||
| that the ResXResourceWriter will generate, however the reader can | ||
| read any of the formats listed below. | ||
| mimetype: application/x-microsoft.net.object.binary.base64 | ||
| value : The object must be serialized with | ||
| : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | ||
| : and then encoded with base64 encoding. | ||
| mimetype: application/x-microsoft.net.object.soap.base64 | ||
| value : The object must be serialized with | ||
| : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||
| : and then encoded with base64 encoding. | ||
| mimetype: application/x-microsoft.net.object.bytearray.base64 | ||
| value : The object must be serialized into a byte array | ||
| : using a System.ComponentModel.TypeConverter | ||
| : and then encoded with base64 encoding. | ||
| --> | ||
| <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||
| <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||
| <xsd:element name="root" msdata:IsDataSet="true"> | ||
| <xsd:complexType> | ||
| <xsd:choice maxOccurs="unbounded"> | ||
| <xsd:element name="metadata"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" use="required" type="xsd:string" /> | ||
| <xsd:attribute name="type" type="xsd:string" /> | ||
| <xsd:attribute name="mimetype" type="xsd:string" /> | ||
| <xsd:attribute ref="xml:space" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="assembly"> | ||
| <xsd:complexType> | ||
| <xsd:attribute name="alias" type="xsd:string" /> | ||
| <xsd:attribute name="name" type="xsd:string" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="data"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
| <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | ||
| <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||
| <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||
| <xsd:attribute ref="xml:space" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="resheader"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" type="xsd:string" use="required" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| </xsd:choice> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| </xsd:schema> | ||
| <resheader name="resmimetype"> | ||
| <value>text/microsoft-resx</value> | ||
| </resheader> | ||
| <resheader name="version"> | ||
| <value>2.0</value> | ||
| </resheader> | ||
| <resheader name="reader"> | ||
| <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
| </resheader> | ||
| <resheader name="writer"> | ||
| <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
| </resheader> | ||
| <data name="Target" xml:space="preserve"> | ||
| <value>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</value> | ||
| </data> | ||
| <data name="DefaultSchema" xml:space="preserve"> | ||
| <value>dbo</value> | ||
| </data> | ||
| </root> |
| @@ -0,0 +1,72 @@ | ||
| namespace RmR.Migrations.IdentityMigrations | ||
| { | ||
| using Microsoft.AspNet.Identity; | ||
| using Microsoft.AspNet.Identity.EntityFramework; | ||
| using System; | ||
| using System.Data.Entity; | ||
| using System.Data.Entity.Migrations; | ||
| using System.Linq; | ||
|
|
||
| internal sealed class Configuration : DbMigrationsConfiguration<RmR.Models.ApplicationDbContext> | ||
| { | ||
| public Configuration() | ||
| { | ||
| AutomaticMigrationsEnabled = false; | ||
| MigrationsDirectory = @"Migrations\IdentityMigrations"; | ||
| ContextKey = "RmR.Models.ApplicationDbContext"; | ||
| } | ||
|
|
||
| protected override void Seed(RmR.Models.ApplicationDbContext context) | ||
| { | ||
| // This method will be called after migrating to the latest version. | ||
| //1. Add admin role | ||
| if ((!context.Roles.Any(r => r.Name == "admin"))) | ||
| { | ||
| //role does not exist - create it | ||
| var roleStore = new RoleStore<IdentityRole>(context); | ||
| var roleManager = new RoleManager<IdentityRole>(roleStore); | ||
| var roleToInsert = new IdentityRole { Name = "admin" }; | ||
| roleManager.Create(roleToInsert); | ||
| } | ||
|
|
||
| //2. Add student role | ||
| if ((!context.Roles.Any(r => r.Name == "user"))) | ||
| { | ||
| //role does not exist - create it | ||
| var roleStore = new RoleStore<IdentityRole>(context); | ||
| var roleManager = new RoleManager<IdentityRole>(roleStore); | ||
| var roleToInsert = new IdentityRole { Name = "client" }; | ||
| roleManager.Create(roleToInsert); | ||
| } | ||
|
|
||
| //3. Add Instructor role | ||
| if ((!context.Roles.Any(r => r.Name == "expert"))) | ||
| { | ||
| //role does not exist - create it | ||
| var roleStore = new RoleStore<IdentityRole>(context); | ||
| var roleManager = new RoleManager<IdentityRole>(roleStore); | ||
| var roleToInsert = new IdentityRole { Name = "expert" }; | ||
| roleManager.Create(roleToInsert); | ||
| } | ||
|
|
||
| //4. add admin user and assign admin role | ||
| if ((!context.Users.Any(u => u.UserName == "admin@rmr.com"))) | ||
| { | ||
| //admin user does not exist - create it | ||
| var userStore = new UserStore<Models.ApplicationUser>(context); | ||
| var userManager = new UserManager<Models.ApplicationUser>(userStore); | ||
| var userToInsert = new Models.ApplicationUser | ||
| { | ||
| UserName = "admin@rmr.com", | ||
| Email = "admin@rmr.com", | ||
| EmailConfirmed = true | ||
| }; | ||
| userManager.Create(userToInsert, "Admin@123456"); | ||
|
|
||
| //assign admin user to admin role | ||
| userManager.AddToRole(userToInsert.Id, "admin"); | ||
| } | ||
|
|
||
| } | ||
| } | ||
| } |
| @@ -0,0 +1,52 @@ | ||
| namespace RmR.Migrations.ResumeMigrations | ||
| { | ||
| using System; | ||
| using System.Data.Entity.Migrations; | ||
|
|
||
| public partial class InitialCreate : DbMigration | ||
| { | ||
| public override void Up() | ||
| { | ||
| CreateTable( | ||
| "dbo.Users", | ||
| c => new | ||
| { | ||
| ID = c.Int(nullable: false, identity: true), | ||
| FirstName = c.String(nullable: false, maxLength: 50), | ||
| LastName = c.String(nullable: false, maxLength: 60), | ||
| Email = c.String(nullable: false, maxLength: 80), | ||
| Discriminator = c.String(nullable: false, maxLength: 128), | ||
| }) | ||
| .PrimaryKey(t => t.ID); | ||
|
|
||
| CreateTable( | ||
| "dbo.Resumes", | ||
| c => new | ||
| { | ||
| ResumeID = c.Int(nullable: false, identity: true), | ||
| ResumeName = c.Int(nullable: false), | ||
| CreatedOn = c.DateTime(nullable: false), | ||
| Status = c.Int(nullable: false), | ||
| Description = c.String(), | ||
| Client_ID = c.Int(), | ||
| Expert_ID = c.Int(), | ||
| }) | ||
| .PrimaryKey(t => t.ResumeID) | ||
| .ForeignKey("dbo.Users", t => t.Client_ID) | ||
| .ForeignKey("dbo.Users", t => t.Expert_ID) | ||
| .Index(t => t.Client_ID) | ||
| .Index(t => t.Expert_ID); | ||
|
|
||
| } | ||
|
|
||
| public override void Down() | ||
| { | ||
| DropForeignKey("dbo.Resumes", "Expert_ID", "dbo.Users"); | ||
| DropForeignKey("dbo.Resumes", "Client_ID", "dbo.Users"); | ||
| DropIndex("dbo.Resumes", new[] { "Expert_ID" }); | ||
| DropIndex("dbo.Resumes", new[] { "Client_ID" }); | ||
| DropTable("dbo.Resumes"); | ||
| DropTable("dbo.Users"); | ||
| } | ||
| } | ||
| } |
| @@ -0,0 +1,18 @@ | ||
| namespace RmR.Migrations.ResumeMigrations | ||
| { | ||
| using System; | ||
| using System.Data.Entity.Migrations; | ||
|
|
||
| public partial class CompletedOn : DbMigration | ||
| { | ||
| public override void Up() | ||
| { | ||
| AddColumn("dbo.Resumes", "CompletedOn", c => c.DateTime(nullable: false)); | ||
| } | ||
|
|
||
| public override void Down() | ||
| { | ||
| DropColumn("dbo.Resumes", "CompletedOn"); | ||
| } | ||
| } | ||
| } |
| @@ -0,0 +1,126 @@ | ||
| <?xml version="1.0" encoding="utf-8"?> | ||
| <root> | ||
| <!-- | ||
| Microsoft ResX Schema | ||
| Version 2.0 | ||
| The primary goals of this format is to allow a simple XML format | ||
| that is mostly human readable. The generation and parsing of the | ||
| various data types are done through the TypeConverter classes | ||
| associated with the data types. | ||
| Example: | ||
| ... ado.net/XML headers & schema ... | ||
| <resheader name="resmimetype">text/microsoft-resx</resheader> | ||
| <resheader name="version">2.0</resheader> | ||
| <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||
| <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||
| <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||
| <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||
| <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||
| <value>[base64 mime encoded serialized .NET Framework object]</value> | ||
| </data> | ||
| <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||
| <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||
| <comment>This is a comment</comment> | ||
| </data> | ||
| There are any number of "resheader" rows that contain simple | ||
| name/value pairs. | ||
| Each data row contains a name, and value. The row also contains a | ||
| type or mimetype. Type corresponds to a .NET class that support | ||
| text/value conversion through the TypeConverter architecture. | ||
| Classes that don't support this are serialized and stored with the | ||
| mimetype set. | ||
| The mimetype is used for serialized objects, and tells the | ||
| ResXResourceReader how to depersist the object. This is currently not | ||
| extensible. For a given mimetype the value must be set accordingly: | ||
| Note - application/x-microsoft.net.object.binary.base64 is the format | ||
| that the ResXResourceWriter will generate, however the reader can | ||
| read any of the formats listed below. | ||
| mimetype: application/x-microsoft.net.object.binary.base64 | ||
| value : The object must be serialized with | ||
| : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | ||
| : and then encoded with base64 encoding. | ||
| mimetype: application/x-microsoft.net.object.soap.base64 | ||
| value : The object must be serialized with | ||
| : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||
| : and then encoded with base64 encoding. | ||
| mimetype: application/x-microsoft.net.object.bytearray.base64 | ||
| value : The object must be serialized into a byte array | ||
| : using a System.ComponentModel.TypeConverter | ||
| : and then encoded with base64 encoding. | ||
| --> | ||
| <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||
| <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||
| <xsd:element name="root" msdata:IsDataSet="true"> | ||
| <xsd:complexType> | ||
| <xsd:choice maxOccurs="unbounded"> | ||
| <xsd:element name="metadata"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" use="required" type="xsd:string" /> | ||
| <xsd:attribute name="type" type="xsd:string" /> | ||
| <xsd:attribute name="mimetype" type="xsd:string" /> | ||
| <xsd:attribute ref="xml:space" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="assembly"> | ||
| <xsd:complexType> | ||
| <xsd:attribute name="alias" type="xsd:string" /> | ||
| <xsd:attribute name="name" type="xsd:string" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="data"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
| <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | ||
| <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||
| <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||
| <xsd:attribute ref="xml:space" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| <xsd:element name="resheader"> | ||
| <xsd:complexType> | ||
| <xsd:sequence> | ||
| <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||
| </xsd:sequence> | ||
| <xsd:attribute name="name" type="xsd:string" use="required" /> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| </xsd:choice> | ||
| </xsd:complexType> | ||
| </xsd:element> | ||
| </xsd:schema> | ||
| <resheader name="resmimetype"> | ||
| <value>text/microsoft-resx</value> | ||
| </resheader> | ||
| <resheader name="version"> | ||
| <value>2.0</value> | ||
| </resheader> | ||
| <resheader name="reader"> | ||
| <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
| </resheader> | ||
| <resheader name="writer"> | ||
| <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||
| </resheader> | ||
| <data name="Target" xml:space="preserve"> | ||
| <value>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</value> | ||
| </data> | ||
| <data name="DefaultSchema" xml:space="preserve"> | ||
| <value>dbo</value> | ||
| </data> | ||
| </root> |
| @@ -0,0 +1,13 @@ | ||
| using System; | ||
| using System.Collections.Generic; | ||
| using System.Linq; | ||
| using System.Text; | ||
| using System.Threading.Tasks; | ||
|
|
||
| namespace RmR.Models | ||
| { | ||
| public class Client : User | ||
| { | ||
| public virtual ICollection<Resume> Resumes { get; set; } | ||
| } | ||
| } |
| @@ -0,0 +1,13 @@ | ||
| using System; | ||
| using System.Collections.Generic; | ||
| using System.Linq; | ||
| using System.Text; | ||
| using System.Threading.Tasks; | ||
|
|
||
| namespace RmR.Models | ||
| { | ||
| public class Expert : User | ||
| { | ||
| public virtual ICollection<Resume> Resumes { get; set; } | ||
| } | ||
| } |
| @@ -0,0 +1,35 @@ | ||
| using System; | ||
| using System.Collections.Generic; | ||
| using System.ComponentModel; | ||
| using System.ComponentModel.DataAnnotations; | ||
| using System.Linq; | ||
| using System.Text; | ||
| using System.Threading.Tasks; | ||
|
|
||
| namespace RmR.Models | ||
| { | ||
| public enum Status | ||
| { | ||
| Submit, Review, Complete | ||
| } | ||
| public class Resume | ||
| { | ||
| public int ResumeID { get; set; } | ||
| [Required] | ||
| [Display(Name="Resume Name")] | ||
| public int ResumeName { get; set; } | ||
| [DataType(DataType.Date)] | ||
| [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] | ||
| [Display(Name = "Uploaded Date")] | ||
| public DateTime CreatedOn { get; set; } | ||
| [DataType(DataType.Date)] | ||
| [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] | ||
| [Display(Name = "Completed Date")] | ||
| public DateTime CompletedOn { get; set; } | ||
| public Status Status { get; set; } | ||
| [DisplayFormat(NullDisplayText ="No Description")] | ||
| public string Description { get; set; } | ||
| public virtual Expert Expert { get; set; } | ||
| public virtual Client Client { get; set; } | ||
| } | ||
| } |
| @@ -0,0 +1,72 @@ | ||
| @model RmR.Models.Resume | ||
|
|
||
| @{ | ||
| ViewBag.Title = "Create"; | ||
| } | ||
|
|
||
| <h2>Create</h2> | ||
|
|
||
|
|
||
| @using (Html.BeginForm()) | ||
| { | ||
| @Html.AntiForgeryToken() | ||
|
|
||
| <div class="form-horizontal"> | ||
| <h4>Resume</h4> | ||
| <hr /> | ||
| @Html.ValidationSummary(true, "", new { @class = "text-danger" }) | ||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.ResumeName, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EditorFor(model => model.ResumeName, new { htmlAttributes = new { @class = "form-control" } }) | ||
| @Html.ValidationMessageFor(model => model.ResumeName, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.CreatedOn, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EditorFor(model => model.CreatedOn, new { htmlAttributes = new { @class = "form-control" } }) | ||
| @Html.ValidationMessageFor(model => model.CreatedOn, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.CompletedOn, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EditorFor(model => model.CompletedOn, new { htmlAttributes = new { @class = "form-control" } }) | ||
| @Html.ValidationMessageFor(model => model.CompletedOn, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.Status, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EnumDropDownListFor(model => model.Status, htmlAttributes: new { @class = "form-control" }) | ||
| @Html.ValidationMessageFor(model => model.Status, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } }) | ||
| @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| <div class="col-md-offset-2 col-md-10"> | ||
| <input type="submit" value="Create" class="btn btn-default" /> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| } | ||
|
|
||
| <div> | ||
| @Html.ActionLink("Back to List", "Index") | ||
| </div> | ||
|
|
||
| @section Scripts { | ||
| @Scripts.Render("~/bundles/jqueryval") | ||
| } |
| @@ -0,0 +1,64 @@ | ||
| @model RmR.Models.Resume | ||
|
|
||
| @{ | ||
| ViewBag.Title = "Delete"; | ||
| } | ||
|
|
||
| <h2>Delete</h2> | ||
|
|
||
| <h3>Are you sure you want to delete this?</h3> | ||
| <div> | ||
| <h4>Resume</h4> | ||
| <hr /> | ||
| <dl class="dl-horizontal"> | ||
| <dt> | ||
| @Html.DisplayNameFor(model => model.ResumeName) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.ResumeName) | ||
| </dd> | ||
|
|
||
| <dt> | ||
| @Html.DisplayNameFor(model => model.CreatedOn) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.CreatedOn) | ||
| </dd> | ||
|
|
||
| <dt> | ||
| @Html.DisplayNameFor(model => model.CompletedOn) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.CompletedOn) | ||
| </dd> | ||
|
|
||
| <dt> | ||
| @Html.DisplayNameFor(model => model.Status) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.Status) | ||
| </dd> | ||
|
|
||
| <dt> | ||
| @Html.DisplayNameFor(model => model.Description) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.Description) | ||
| </dd> | ||
|
|
||
| </dl> | ||
|
|
||
| @using (Html.BeginForm()) { | ||
| @Html.AntiForgeryToken() | ||
|
|
||
| <div class="form-actions no-color"> | ||
| <input type="submit" value="Delete" class="btn btn-default" /> | | ||
| @Html.ActionLink("Back to List", "Index") | ||
| </div> | ||
| } | ||
| </div> |
| @@ -0,0 +1,58 @@ | ||
| @model RmR.Models.Resume | ||
|
|
||
| @{ | ||
| ViewBag.Title = "Details"; | ||
| } | ||
|
|
||
| <h2>Details</h2> | ||
|
|
||
| <div> | ||
| <h4>Resume</h4> | ||
| <hr /> | ||
| <dl class="dl-horizontal"> | ||
| <dt> | ||
| @Html.DisplayNameFor(model => model.ResumeName) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.ResumeName) | ||
| </dd> | ||
|
|
||
| <dt> | ||
| @Html.DisplayNameFor(model => model.CreatedOn) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.CreatedOn) | ||
| </dd> | ||
|
|
||
| <dt> | ||
| @Html.DisplayNameFor(model => model.CompletedOn) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.CompletedOn) | ||
| </dd> | ||
|
|
||
| <dt> | ||
| @Html.DisplayNameFor(model => model.Status) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.Status) | ||
| </dd> | ||
|
|
||
| <dt> | ||
| @Html.DisplayNameFor(model => model.Description) | ||
| </dt> | ||
|
|
||
| <dd> | ||
| @Html.DisplayFor(model => model.Description) | ||
| </dd> | ||
|
|
||
| </dl> | ||
| </div> | ||
| <p> | ||
| @Html.ActionLink("Edit", "Edit", new { id = Model.ResumeID }) | | ||
| @Html.ActionLink("Back to List", "Index") | ||
| </p> |
| @@ -0,0 +1,74 @@ | ||
| @model RmR.Models.Resume | ||
|
|
||
| @{ | ||
| ViewBag.Title = "Edit"; | ||
| } | ||
|
|
||
| <h2>Edit</h2> | ||
|
|
||
|
|
||
| @using (Html.BeginForm()) | ||
| { | ||
| @Html.AntiForgeryToken() | ||
|
|
||
| <div class="form-horizontal"> | ||
| <h4>Resume</h4> | ||
| <hr /> | ||
| @Html.ValidationSummary(true, "", new { @class = "text-danger" }) | ||
| @Html.HiddenFor(model => model.ResumeID) | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.ResumeName, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EditorFor(model => model.ResumeName, new { htmlAttributes = new { @class = "form-control" } }) | ||
| @Html.ValidationMessageFor(model => model.ResumeName, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.CreatedOn, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EditorFor(model => model.CreatedOn, new { htmlAttributes = new { @class = "form-control" } }) | ||
| @Html.ValidationMessageFor(model => model.CreatedOn, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.CompletedOn, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EditorFor(model => model.CompletedOn, new { htmlAttributes = new { @class = "form-control" } }) | ||
| @Html.ValidationMessageFor(model => model.CompletedOn, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.Status, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EnumDropDownListFor(model => model.Status, htmlAttributes: new { @class = "form-control" }) | ||
| @Html.ValidationMessageFor(model => model.Status, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" }) | ||
| <div class="col-md-10"> | ||
| @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } }) | ||
| @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" }) | ||
| </div> | ||
| </div> | ||
|
|
||
| <div class="form-group"> | ||
| <div class="col-md-offset-2 col-md-10"> | ||
| <input type="submit" value="Save" class="btn btn-default" /> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| } | ||
|
|
||
| <div> | ||
| @Html.ActionLink("Back to List", "Index") | ||
| </div> | ||
|
|
||
| @section Scripts { | ||
| @Scripts.Render("~/bundles/jqueryval") | ||
| } |
| @@ -0,0 +1,57 @@ | ||
| @model IEnumerable<RmR.Models.Resume> | ||
|
|
||
| @{ | ||
| ViewBag.Title = "Index"; | ||
| } | ||
|
|
||
| <h2>Index</h2> | ||
|
|
||
| <p> | ||
| @Html.ActionLink("Create New", "Create") | ||
| </p> | ||
| <table class="table"> | ||
| <tr> | ||
| <th> | ||
| @Html.DisplayNameFor(model => model.ResumeName) | ||
| </th> | ||
| <th> | ||
| @Html.DisplayNameFor(model => model.CreatedOn) | ||
| </th> | ||
| <th> | ||
| @Html.DisplayNameFor(model => model.CompletedOn) | ||
| </th> | ||
| <th> | ||
| @Html.DisplayNameFor(model => model.Status) | ||
| </th> | ||
| <th> | ||
| @Html.DisplayNameFor(model => model.Description) | ||
| </th> | ||
| <th></th> | ||
| </tr> | ||
|
|
||
| @foreach (var item in Model) { | ||
| <tr> | ||
| <td> | ||
| @Html.DisplayFor(modelItem => item.ResumeName) | ||
| </td> | ||
| <td> | ||
| @Html.DisplayFor(modelItem => item.CreatedOn) | ||
| </td> | ||
| <td> | ||
| @Html.DisplayFor(modelItem => item.CompletedOn) | ||
| </td> | ||
| <td> | ||
| @Html.DisplayFor(modelItem => item.Status) | ||
| </td> | ||
| <td> | ||
| @Html.DisplayFor(modelItem => item.Description) | ||
| </td> | ||
| <td> | ||
| @Html.ActionLink("Edit", "Edit", new { id=item.ResumeID }) | | ||
| @Html.ActionLink("Details", "Details", new { id=item.ResumeID }) | | ||
| @Html.ActionLink("Delete", "Delete", new { id=item.ResumeID }) | ||
| </td> | ||
| </tr> | ||
| } | ||
|
|
||
| </table> |
| @@ -0,0 +1,16 @@ | ||
| @if (Request.IsAuthenticated) | ||
| { | ||
| if (User.IsInRole("admin")) | ||
| { | ||
| <li>@Html.ActionLink("Resumes", "Index", "Resume")</li> | ||
| <li>@Html.ActionLink("Users","Index","User")</li> | ||
| } | ||
| else if (User.IsInRole("client")) | ||
| { | ||
| <li>@Html.ActionLink("Your Resumes", "Index", "Client")</li> | ||
| } | ||
| else if (User.IsInRole("expert")) | ||
| { | ||
| <li>@Html.ActionLink("List of Resumes", "Index", "Expert")</li> | ||
| } | ||
| } |