Blake Hall

Data Developer and Analyst

bio

Professional

Currently, I’m a Web Developer at Enthusiast Enterprises, Inc. Starting with a role on the data team, my duties quickly expanded from integrating data from vendor APIs into our database, to projects outside of the team’s scope involving frontend JavaScript and CSS modifications; and working with NetSuite restlets and SuiteQL. I have had opportunities to work with technologies such as Docker, GitHub, Amazon Webservices, amongst various other customized APIs.

Prior to my current position, I spent nearly a decade in the fast-paced insurance industry with roles ranging from customer service and claims adjuster to positions like trainer and team lead. These positions have given me perspective, and allowed me to develop exceptional communication, teamwork, and decision-making skills.

personal

I complement my time coding and working on computer projects by spending time with my family, kayaking, fishing, and hiking. I enjoy watching the Green Bay Packers and talking about sports with my friends. On the weekends I am a DJ at a Sports Club, keeping the energy high and the bass low.

Resume

Resume - PDF Resume - DOC

Work Examples

HTML/CSS Examples

This Website!!!

This website was built using the skills i've learned

Efficient and Visually Appealing Forms

Provide Feedback








CSS Variables

										
										:root {
										  --red: #e8175d;
										  --lred: #CC527A;
										  --medgray: #474747;
										  --darkgray: #363636;
										  --formdgreen: #00783e;
										  --formlgreen: #47b881;
										  --formwhite: #f1faf5;
										}

										body {
											background-color: var(--darkgray);
											color: white;
											font-family: 'Raleway', sans-serif;
										}
										
										

JavaScript Examples

Understanding of DOM Manipulation

Here you are able to alter the child divs below! Just add a short message, select which div you want to add it to, and then click the “Add Message to Div” button.



Parent Div

Child Div 1

Child Div 2

Child Div 3

										
										function dom_funct(){
											var child_rad = document.getElementsByName("child");
											
											var para = document.createElement("p");
											var shrt_msg = document.getElementById('shrt_msg').value;
											console.log(shrt_msg);
											var msg_text = document.createTextNode(shrt_msg);	
											//validate there is a message
											if (shrt_msg != ""){
												
												//clear previous messages from divs
												var c_divs = document.getElementsByClassName("c_div")
												for(i = 0; i < c_divs.length; i++){
													console.log(c_divs[i]);		
													
													var c_div_list = c_divs[i].childElementCount;
													console.log(c_div_list);
													
													if(c_div_list > 1){
													c_divs[i].removeChild(c_divs[i].childNodes[3]);
													}
												}
											
												//determine which div to put text in, and add it
												for(i = 0; i < child_rad.length; i++){
													if(child_rad[i].checked){
														c_val = child_rad[i].value;
														console.log(c_val)
														c_sel = document.getElementById(c_val);
														
														c_sel.appendChild(para);
														para.appendChild(msg_text);			
													}
												}
											}else{
													var nomsg_msg = "Type a short message!";
													var border = "1px solid red";
													document.getElementById("shrt_msg").style.border = border;
													window.alert(nomsg_msg);
												}	
												
												document.getElementById('shrt_msg').value = "";
										}
										
										

IIFE Functions

										
										(function() {
											convRate = 0.9144;
											function y2m(value) {
												return value * convRate;
											}

											var elYards = document.getElementById("yards");
											var elYardsValue = elYards.textContent;
											var convResult = y2m(elYardsValue);
											var elMeters = document.getElementById("meters");

											elMeters.textContent = convResult;										  
										}());
										
										

C# Examples

User-friendly Windows Forms

screen shot of HTML code download application
										
										using System;
										using System.Collections.Generic;
										using System.ComponentModel;
										using System.Data;
										using System.Drawing;
										using System.Linq;
										using System.Runtime.CompilerServices;
										using System.Text;
										using System.Threading.Tasks;
										using System.Windows.Forms;

										namespace Assessment8
										{
											public partial class Form1 : Form
											{
												public Form1()
												{
													InitializeComponent();

													//disable rental fields on initialize based on check box
													foreach (Control c1 in gb_Rental.Controls)
														if (c1 is Label)
														{
															((Label)c1).ForeColor = SystemColors.GrayText;
														}
													foreach (Control c2 in gb_Rental.Controls)
														if (c2 is TextBox)
														{
															((TextBox)c2).ReadOnly = true;
														}

												}
												
												//set methods for totals
												private decimal OilLubeCharges(decimal num1, decimal num2)
												{
													return num1 + num2;
												}

												private decimal FlushCharges(decimal num1, decimal num2)
												{
													return num1 + num2;
												}

												private decimal MiscCharges(decimal num1, decimal num2, decimal num3)
												{
													return num1 + num2 + num3;
												}

												private decimal OtherCharges(decimal num1, decimal num2, decimal num3)
												{
													return num1 + (num2 * num3);
												}

												private decimal TaxCharges(decimal num1, decimal num2)
												{
													return (num1 * num2);
													
												}

												private decimal RentalCharges(decimal num1, decimal num2)
												{
													return num1 * num2;
												}

												private decimal TotalCharges(decimal num1, decimal num2, decimal num3, decimal num4, decimal num5, decimal num6)
												{
													return num1 + num2 + num3 + num4 + num5 + num6;
												}

												//set methods for clearing
												private void ClearOilLube()
												{
													foreach(Control c in gb_Oil.Controls)
													if (c is CheckBox)
													{
														((CheckBox)c).Checked = false;
													}
												}
												private void ClearFlushes()
												{
													foreach (Control c in gb_Flushes.Controls)
														if (c is CheckBox)
														{
															((CheckBox)c).Checked = false;
														}
												}
												private void ClearMisc()
												{
													foreach (Control c in gb_Misc.Controls)
														if (c is CheckBox)
														{
															((CheckBox)c).Checked = false;
														}
												}

												private void ClearOther()
												{
													foreach (Control c in gb_PartsLab.Controls)
														if (c is TextBox)
														{
															((TextBox)c).Clear();
														}
												}

												private void ClearFees()
												{
													lbl_SumServLabDisp.Text = "";
													lbl_SumPartsDisp.Text = "";
													lbl_SumTaxDisp.Text = "";
													lbl_SumRentDisp.Text = "";
													lbl_SumTotFeesDisp.Text = "";        
												}

												private void ClearRent()
												{
													//update checkbox and disable rental fields
													cb_RentNeed.Checked = false;

													foreach (Control c1 in gb_Rental.Controls)
														if (c1 is Label)
														{
															((Label)c1).ForeColor = SystemColors.GrayText;
														}
													foreach (Control c2 in gb_Rental.Controls)
														if (c2 is TextBox)
														{
															((TextBox)c2).ReadOnly = true;
														}

												}

												//set method to display totals in labels in summary
												private void DispTotals(decimal num1, decimal num2, decimal num3, decimal num4, decimal num5, decimal num6, decimal num7, decimal num8, decimal num9)
												{
													lbl_SumServLabDisp.Text = ((num1 + num2 + num3) + (num4 * num5)).ToString("N2");
													lbl_SumPartsDisp.Text = num6.ToString("N2");
													lbl_SumTaxDisp.Text = num7.ToString("N2");
													lbl_SumRentDisp.Text = num8.ToString("N2");
													lbl_SumTotFeesDisp.Text = num9.ToString("N2");
												}


											private void lbl_Parts_Click(object sender, EventArgs e)
												{

												}

												private void btn_Clear_Click(object sender, EventArgs e)
												{
													ClearOilLube();
													ClearFlushes();
													ClearMisc();
													ClearOther();
													ClearFees();
													ClearRent();
												}

												private void btn_Calc_Click(object sender, EventArgs e)
												{
													//declare variables for OilLubeCharges method
													decimal oilPrice, lubePrice, oilLubePrice;

													//Set variables for OilLubeCharges method based on checkboxes
													if(cb_Oil.Checked == false)
													{
														oilPrice = 0.00m;
													}
													else
													{
														oilPrice = 26.00m;
													}

													if (cb_Lube.Checked == false)
													{
														lubePrice = 0.00m;
													}
													else
													{
														lubePrice = 18.00m;
													}

													//call method
													oilLubePrice = OilLubeCharges(oilPrice, lubePrice);

													//declare variables for FlushCharges method
													decimal radPrice, transPrice, totFlushPrice;

													//Set variables for FlushCharges method based on checkboxes
													if (cb_RadFlush.Checked == false)
													{
														radPrice = 0.00m;
													}
													else
													{
														radPrice = 30.00m;
													}
													if (cb_TransFlush.Checked == false)
													{
														transPrice = 0.00m;
													}
													else
													{
														transPrice = 80.00m;
													}

													//call method
													totFlushPrice = FlushCharges(radPrice, transPrice);

													//declare variables for MiscCharges method
													decimal inspectPrice, muffPrice, tireRotPrice, totMiscPrice;

													//Set variables for MiscCharges method based on checkboxes
													if (cb_Inspect.Checked == false)
													{
														inspectPrice = 0.00m;
													}
													else
													{
														inspectPrice = 15.00m;
													}
													if (cb_RepMuff.Checked == false)
													{
														muffPrice = 0.00m;
													}
													else
													{
														muffPrice = 100.00m;
													}
													if (cb_TireRot.Checked == false)
													{
														tireRotPrice = 0.00m;
													}
													else
													{
														tireRotPrice = 20.00m;
													}
													//call method
													totMiscPrice = MiscCharges(inspectPrice, muffPrice,tireRotPrice);

													//declare variables for OtherCharges method
													decimal partsPrice, laborHours, totOtherPrice;
													decimal wage = 20.00m;

													//Set variables for OtherCharges method based on textboxes
													if (tb_Parts.Text != "")
													{
														if (decimal.TryParse(tb_Parts.Text, out partsPrice))
														{

														}
														else
														{
															MessageBox.Show("The parts cost you've entered is not valid.");
														}
													}
													else
													{
														partsPrice = 0.00m;
													}

													if (tb_Labor.Text != "")
													{
														if (decimal.TryParse(tb_Labor.Text, out laborHours))
														{

														}
														else
														{
															MessageBox.Show("The number of hours you've entered is not valid.");
														}
													}
													else
													{
														laborHours = 0.00m;
													}

													//call method
													totOtherPrice = OtherCharges(partsPrice, laborHours, wage);
												   

													//declare variables for TaxCharges method - partsPrice is already declared
													decimal taxRate = 0.06m, totTaxPrice;


													//call method
													totTaxPrice = TaxCharges(partsPrice, taxRate);


													//declare variables for RentalCharges method
													decimal rentPrice = 0.00m, totRentPrice;
													int rentDays;

													//Set variables for RentalCharges method based on textboxes
													if (tb_RentDays.Text != "")
													{
														if (int.TryParse(tb_RentDays.Text, out rentDays))
														{
															while ((rentDays < 1) || (rentDays > 7))
															{
																MessageBox.Show("The number of rental days you've entered is not valid.");
															}
														}
														else
														{
															MessageBox.Show("The number of rental days you've entered is not valid.");
														}
													}
													else
													{
														rentDays = 1;
													}


													if (tb_RentRate.Text != "")
													{
														if (decimal.TryParse(tb_RentRate.Text, out rentPrice))
														{
														 
														}
														else
														{
															MessageBox.Show("The number of rental rate you've entered is not valid.");
														}
													}

													//call method
													totRentPrice = RentalCharges(rentPrice, rentDays);
													lbl_SumRentDisp.Text = totRentPrice.ToString();

													//declare variable for TotalCharges method
													decimal totalPrice;

													//call TotalCharges method
													totalPrice = TotalCharges(oilLubePrice, totFlushPrice, totMiscPrice, totOtherPrice, totTaxPrice, totRentPrice);
													DispTotals(oilLubePrice, totFlushPrice, totMiscPrice, laborHours, wage, partsPrice, totTaxPrice, totRentPrice, totalPrice);          

												}

												private void cb_RentNeed_CheckedChanged(object sender, EventArgs e)
												{
													if (cb_RentNeed.Checked != false)
													{
														foreach (Control c1 in gb_Rental.Controls)
															if (c1 is Label)
															{
																((Label)c1).ForeColor = SystemColors.ControlText;
															}
														foreach (Control c2 in gb_Rental.Controls)
															if (c2 is TextBox)
															{
																((TextBox)c2).ReadOnly = false;

																decimal rentRate = 50.00m;
																tb_RentRate.Text = rentRate.ToString();
															}
														//if rental check box is checked, clear fees
														ClearFees();
													}
													else
													{
														foreach (Control c1 in gb_Rental.Controls)
															if (c1 is Label)
															{
																((Label)c1).ForeColor = SystemColors.GrayText;
															}
														foreach (Control c2 in gb_Rental.Controls)
															if (c2 is TextBox)
															{
																((TextBox)c2).ReadOnly = true;
																((TextBox)c2).Clear();                                                 
															}

														//if rental check box is unchecked, clear fees
														ClearFees();

														
													}
												}

												private void btn_Exit_Click(object sender, EventArgs e)
												{
													this.Close();
												}

												private void cb_Oil_CheckedChanged(object sender, EventArgs e)
												{

												}
											}
										}
										
										

SQL Examples

SQL Triggers

										
											--1. TRIPS
											--When a TRIP's SEASON is changed to winter, the DISTANCE is reduced
											by half for safety.

											CREATE TRIGGER SVNG_LVES
											ON TRIP
											AFTER UPDATE AS

											--variable will be used in determining which records will be updated
											on corresponding tables
											DECLARE @vTRIP AS INT
											SET @vTRIP = (SELECT TRIP_ID 
																FROM inserted i
																WHERE i.SEASON = 'Winter')

											UPDATE TRIP SET DISTANCE = (DISTANCE / 2)
											WHERE TRIP_ID = @vTRIP

											-- Run this query to fire the trigger
											UPDATE TRIP 
											SET SEASON = 'Winter'
											WHERE TRIP_ID = 33
										
										

Data Structures

Creating and referencing an array in JS

Choose a few colors and click the button to change the color of the box below. This will choose only colors you’ve selected and display them randomly.

										
										function change_color(){
										var m = "you need to pick at least 2 colors for this to be fun."
										// create array
										var colors = [];
										//find checkboxes that are checked
										var checkboxes = document.querySelectorAll('input[type=checkbox]:checked');

										//validate that some boxes are checked
										if (checkboxes.length > 1;) {

											//fill array with values from checked checkboxes
											for (var i = 0; i > checkboxes.length; i++;) {
											  colors.push(checkboxes[i].value);
											}

											//create a random number to pick the random color
											//don't use the same number twice in a row
											var max = colors.length;


											do {
											var rand = Math.floor(Math.random() * max);
											console.log(rand);
											} while (oldRand == rand)
											oldRand = rand;

											//choose random color and change color of color_block div
											var new_color = colors[rand];
											console.log(new_color);
											document.getElementById("color_block").style.backgroundColor = new_color;
											
										} else
											
											window.alert(m);
										}