Skip to content

moldypenguins/BambooNET

Repository files navigation

BambooNET

BambooNET

A .NET client library for the BambooHR API.


License  Version  Downloads 

Open Issues  Open Pull Requests  Last Commit 

Dependabot  CodeQL  GitHub Sponsors 


Table of Contents

Usage

public class Program
{
  private static readonly string COMPANY_SUBDOMAIN = "yourcompany";
  private static readonly string API_KEY = "YourBamb00HRAPIKey";

  private static readonly int BAMBOO_ID = 225;
  private static readonly DateTime START_DATE = new(2024, 11, 30);
  private static readonly DateTime END_DATE = new(2024, 12, 13);


  public static async Task Main()
  {
    try
    {
      System.Console.WriteLine("Running...");

      var bambooClient = new BambooClient(COMPANY_SUBDOMAIN, API_KEY);
      //var bambooClient = new BambooClient(COMPANY_SUBDOMAIN, API_KEY, DATE_FORMAT);

      var timesheets = await bambooClient.TimeTracking.GetTimesheetEntriesAsync(START_DATE, END_DATE);
      System.Console.WriteLine($"TimeTracking.GetTimesheetEntriesAsync Results: {timesheets.Count}");

      var requests = await bambooClient.TimeOff.GetRequestsAsync(START_DATE, END_DATE);
      System.Console.WriteLine($"TimeOff.GetRequestsAsync Results: {requests.Count}");

      var whosout = await bambooClient.TimeOff.GetWhosOutAsync(START_DATE, END_DATE);
      System.Console.WriteLine($"TimeOff.GetWhosOutAsync Results: {whosout.Count}");

      var employeedata = await bambooClient.Employees.GetEmployeeDataAsync(BAMBOO_ID);
      System.Console.WriteLine($"Employees.GetEmployeeDataAsync Results: {employeedata.EmployeeNumber} {employeedata.FirstName} {employeedata.LastName}");

      var ex_employeedata = await bambooClient.Employees.GetEmployeeDataAsync<ExtendedEmployeeData>(BAMBOO_ID);
      System.Console.WriteLine($"Employees.GetEmployeeDataAsync Results: {ex_employeedata}");

      var tabledata = await bambooClient.Employees.GetTabularDataAsync<JobInfoData>(BAMBOO_ID, "jobInfo");
      System.Console.WriteLine($"Employees.GetTabularDataAsync Results: {tabledata.Count}");

      var dataset = await bambooClient.Datasets.GetDatasetDataAsync<ExtendedEmployeeDataset>("employee",
        new(FiltersMatch.ANY,
        [
          new("hireDate", FilterOperator.GreaterThanOrEqual, START_DATE.ToString(bambooClient.DateFormat))
        ]),
        [
          new("hireDate", SortDirection.DESC),
          new("lastName", SortDirection.ASC),
          new("firstName", SortDirection.ASC)
        ]
      );
      System.Console.WriteLine($"Datasets.GetDatasetData Results: {dataset.Count}");
      foreach (var datarow in dataset)
      {
        System.Console.WriteLine($"\t{datarow}");
      }

      System.Console.WriteLine("Done.");
      System.Console.ReadLine();
    }
    catch (Exception ex)
    {
      System.Console.WriteLine(ex.ToString());
    }

  } //end public static async void Main()

} //end public class Program


internal class ExtendedEmployeeData : EmployeeData
{
  [JsonProperty("jobTitle")]
  public string JobTitle { get; set; }

  [JsonProperty("payGroup")]
  public string PayGroup { get; set; }

  /// <summary>
  /// Override ToString()
  /// </summary>
  /// <returns></returns>
  public override string ToString()
  {
    return $"{Id}: #{EmployeeNumber} {FirstName} {LastName}, Position: {JobTitle}, Pay Group: {PayGroup}";
  }

} //end internal class ExtendedEmployeeData : EmployeeData


internal class ExtendedEmployeeDataset : EmployeeDataset
{
  [JsonProperty("jobInformationJobTitle")]
  public string JobTitle { get; set; }

  [JsonProperty("payGroup")]
  public string PayGroup { get; set; }

  /// <summary>
  /// Override ToString()
  /// </summary>
  /// <returns></returns>
  public override string ToString()
  {
    return $"{Id}: #{EmployeeNumber} {FirstName} {LastName}, Position: {JobTitle}, Pay Group: {PayGroup}";
  }

} //end internal class ExtendedEmployeeDataset : EmployeeDataset


internal class JobInfoData : DataAbstract
{
  //public int Id { get; set; }

  [JsonProperty("employeeNumber")]
  public int EmployeeNumber { get; set; }

  [JsonProperty("date")]
  public DateTime? Date { get; set; }

  [JsonProperty("location")]
  public string Location { get; set; }

  [JsonProperty("department")]
  public string Department { get; set; }

  [JsonProperty("division")]
  public string Division { get; set; }

  [JsonProperty("jobTitle")]
  public string JobTitle { get; set; }

  [JsonProperty("reportsTo")]
  public string ReportsTo { get; set; }


  /// <summary>
  /// Override ToString()
  /// </summary>
  /// <returns></returns>
  public override string ToString()
  {
    return $"Date: {Date:yyyy-MM-dd}, Location: {Location}, Department: {Department}, Division: {Division}, JobTitle: {JobTitle}, ReportsTo: {ReportsTo}";
  }

} //end internal class TableData : DataAbstract

Reference

Code of Conduct

This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior.
For more information see the Code of Conduct.

Issues / Support

See SECURITY.md for feature requests or bug reports.

Contributing

See CONTRIBUTING.md for more information.

Author

CRDevel

Craig Roberts
GitHub Discord Telegram

License

Copyright © 2024 CR Development. Licensed under the MIT license.
See LICENSE.md or https://opensource.org/license/mit for more details.

Releases

No releases published

Languages