Browse Source

Generate Cover Letter text using UserData and posting

master
Gregory Rudolph 3 years ago
parent
commit
0728c7f326
Signed by: rudi
GPG Key ID: EF64F3CBD1A1EBDD
  1. 22
      Pages/Index.cshtml
  2. 16
      Pages/Index.cshtml.cs
  3. 13
      Posting.cs
  4. 2
      UserData.cs

22
Pages/Index.cshtml

@ -4,6 +4,7 @@
ViewData["Title"] = "Vacancy Submitter"; ViewData["Title"] = "Vacancy Submitter";
} }
<form method="post" enctype="multipart/form-data">
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
<div class="card"> <div class="card">
@ -11,7 +12,6 @@
<h6>Start Here</h6> <h6>Start Here</h6>
</div> </div>
<div class="card-body"> <div class="card-body">
<form method="post" enctype="multipart/form-data">
<div class="form-group"> <div class="form-group">
<label for="posting_id">Vacancy ID: </label> <label for="posting_id">Vacancy ID: </label>
<input asp-for="Posting_ID" type="text" id="posting_id" class="form-control" /> <input asp-for="Posting_ID" type="text" id="posting_id" class="form-control" />
@ -32,7 +32,6 @@
</div> </div>
<br /> <br />
<button type="submit" class="btn btn-primary">Generate Application</button> <button type="submit" class="btn btn-primary">Generate Application</button>
</form>
</div> </div>
</div> </div>
</div> </div>
@ -43,8 +42,7 @@
</div> </div>
<div class="card-body"> <div class="card-body">
<p>Cover Letter</p> <p>Cover Letter</p>
<textarea style="width: 100%" <textarea asp-for="CoverLetter" class="form-control" style="width: 100%; height: 18rem" name="CoverLetter" id="CoverLetter"></textarea>
name="cover_letter">Nothing yet, this is where the Cover Letter would go!</textarea>
</div> </div>
<div class="card-footer"> <div class="card-footer">
<button type="submit" class="btn btn-secondary">Submit</button> <button type="submit" <button type="submit" class="btn btn-secondary">Submit</button> <button type="submit"
@ -55,20 +53,30 @@
</div> </div>
@if (Model.posting != null) @if (Model.posting != null)
{ {
@if (Model.posting.DateDue < new DateTime()) {
<script>
alert("Deadline for posting has already passed!");
</script>
}
<div class="col-md-3"> <div class="col-md-3">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header">
<h6>Posting Info</h6> <h6>Posting Info for Vacancy ID @Model.posting.VacancyID, Box @Model.posting.BoxNumber</h6>
</div> </div>
<div class="card-body"> <div class="card-body">
<p>Title: @Model.posting.Title</p> <p>Title: @Model.posting.Title</p>
<p>Grade @Model.posting.SalaryGrade</p> <p>Grade: @Model.posting.SalaryGrade</p>
<p>Agency: @Model.posting.Agency</p> <p>Agency: @Model.posting.Agency</p>
<p>Union: @Model.posting.BargainingUnit</p> <p>Union: @Model.posting.BargainingUnit</p>
<p>Contact Name: @Model.posting.ContactName</p> <p>Contact Name: @Model.posting.ContactName</p>
<p>Contact Email: <a href="mailto:@Model.posting.ContactEmailAddress?subject=Box # @Model.posting.BoxNumber Vacancy ID @Model.posting.VacancyID">@Model.posting.ContactEmailAddress</a> </p> <p>Contact Email: <a href="mailto:@Model.posting.ContactEmailAddress?subject=Box @Model.posting.BoxNumber, Vacancy @Model.posting.VacancyID">@Model.posting.ContactEmailAddress</a> </p>
</div>
<div class="card-footer text-muted">
Posted @Model.posting.DatePosted.ToString("d"), Applications Due @Model.posting.DateDue.ToString("d")
</div> </div>
</div> </div>
</div> </div>
} }
</form>
</div> </div>

16
Pages/Index.cshtml.cs

@ -12,6 +12,7 @@ namespace StateJobsNYSubmit.Pages
private PrivateData p = new PrivateData(); private PrivateData p = new PrivateData();
public UserData userData; public UserData userData;
public string Posting_ID {get; set;} public string Posting_ID {get; set;}
public string CoverLetter {get; set;}
public Posting posting = null; public Posting posting = null;
public IndexModel(ILogger<IndexModel> logger) public IndexModel(ILogger<IndexModel> logger)
{ {
@ -30,9 +31,8 @@ namespace StateJobsNYSubmit.Pages
string test = p.DecryptString(cookieValue); string test = p.DecryptString(cookieValue);
userData = JsonConvert.DeserializeObject<UserData>(test); userData = JsonConvert.DeserializeObject<UserData>(test);
userData.visitCounter++; userData.visitCounter++;
this.CoverLetter = userData.coverLetter;
} }
Response.Cookies.Append("PrivateData", p.EncryptString(JsonConvert.SerializeObject(userData)));
Console.WriteLine($"Value of counter: {userData.visitCounter}");
} }
public void OnGet(string vacancyID) public void OnGet(string vacancyID)
{ {
@ -40,22 +40,26 @@ namespace StateJobsNYSubmit.Pages
if (vacancyID != null && !vacancyID.Trim().Equals("")) { if (vacancyID != null && !vacancyID.Trim().Equals("")) {
posting = new Posting(vacancyID); posting = new Posting(vacancyID);
this.Posting_ID = vacancyID; this.Posting_ID = vacancyID;
} else { this.CoverLetter = userData.coverLetter;
Console.WriteLine($"Unable to get Posting ID from Get Request URL."); }
}
Response.Cookies.Append("PrivateData", p.EncryptString(JsonConvert.SerializeObject(userData)));
} }
public void OnPost() public void OnPost()
{ {
GetUserData(); GetUserData();
string vacancyID = Request.Form["posting_id"]; string vacancyID = Request.Form["posting_id"];
string coverLetterFormat = Request.Form["CoverLetter"];
userData.coverLetter = coverLetterFormat;
if (vacancyID != null && !vacancyID.Trim().Equals("")) { if (vacancyID != null && !vacancyID.Trim().Equals("")) {
posting = new Posting(vacancyID); posting = new Posting(vacancyID);
this.CoverLetter = posting.GenerateLetter(coverLetterFormat);
this.Posting_ID = vacancyID;
} else { } else {
Console.WriteLine($"Unable to get Posting ID from form."); Console.WriteLine($"Unable to get Posting ID from form.");
} }
Response.Cookies.Append("PrivateData", p.EncryptString(JsonConvert.SerializeObject(userData)));
} }
} }
} }

13
Posting.cs

@ -38,7 +38,6 @@ public class Posting
public Posting(string id) public Posting(string id)
{ {
string fullUrl = "https://statejobs.ny.gov/employees/vacancyDetailsPrint.cfm?id=" + id; string fullUrl = "https://statejobs.ny.gov/employees/vacancyDetailsPrint.cfm?id=" + id;
Console.WriteLine(fullUrl);
HtmlWeb web = new HtmlWeb(); HtmlWeb web = new HtmlWeb();
var htmlDoc = web.Load(fullUrl); var htmlDoc = web.Load(fullUrl);
// extracting all links // extracting all links
@ -84,7 +83,19 @@ public class Posting
} }
i++; i++;
} }
Regex boxRegex = new Regex(@"(Box \d+)");
this.BoxNumber = boxRegex.Matches(this.NotesOnApplying)[0].Value.Replace("Box ", "");
this.BargainingUnit = this.BargainingUnit.Replace("&amp;", "&"); this.BargainingUnit = this.BargainingUnit.Replace("&amp;", "&");
this.VacancyID = id; this.VacancyID = id;
} }
public string GenerateLetter(string s) {
string ret = "" + s;
ret = ret.Replace("$name", this.ContactName);
ret = ret.Replace("$vacancy", this.VacancyID);
ret = ret.Replace("$title", this.Title);
ret = ret.Replace("$box", this.BoxNumber);
return ret;
}
} }

2
UserData.cs

@ -4,9 +4,11 @@
public class UserData public class UserData
{ {
public string email { get; set; } public string email { get; set; }
public string name {get; set;}
public string smtpHost { get; set; } public string smtpHost { get; set; }
public List<string> skillOptions { get; set; } public List<string> skillOptions { get; set; }
public string identifier { get; set; } public string identifier { get; set; }
public int visitCounter { get; set;} public int visitCounter { get; set;}
public string coverLetter { get; set; }
} }

Loading…
Cancel
Save