Invoicing VApp

Multi column


Time Sheet & Tasks

DateTasksTagsHoursVerifiedStatusNotes
Tasks Completed
tags include #todo/Bry
done
short mode
limit 15
Tasks In Progress
tags include #todo/Bry
not done
short mode
limit 15
Tasks Blocked & Reasons
tag includes #todo/Bry 
tag includes #Blocked
not done
short mode
limit 15
  • List reasons or suggestions to unblock the tasks

Expenses Incurred

DateDescriptionTagsAmountReceiptStatusNotes

Privileges & Benefits Received

PeriodDescriptionTagsTypeSupervisorStatusNotes

Deferred Earnings


Created: =dateformat(this.file.ctime, "yyyy-MM-dd") • Modified: =dateformat(this.file.mtime, "yyyy-MM-dd") • Last Shared: =dateformat(this.share_updated, "yyyy-MM-dd")

Attestation & Signature

By signing this Invoice, I attest that I have verified that the above information is true and correct as of the date modified, and that I promise to resolve all related disputes according to the Principles of Peacemaking and to abide the Governing Principles & Agreements

Methods of Signing

Replace and update handwritten block as needed to show consent with your signature and date of signing

{
	"versionAtEmbed": "0.2.2",
	"filepath": "Ink/Writing/2024.6.2 - 9.07am.writing"
}

// Function to compute SHA-256 hash
async function sha256(message) {
    const msgBuffer = new TextEncoder().encode(message);
    const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => ('00' + b.toString(16)).slice(-2)).join('');
    return hashHex;
}
 
// Function to compute SHA-256 hash and return the first 8 characters
async function sha256Short(message, length) {
    const msgBuffer = new TextEncoder().encode(message);
    const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => ('00' + b.toString(16)).slice(-2)).join('');
    return hashHex.slice(0, length); // Return the first 8 characters of the hash
}
 
 
let sha256tid = sha256Short("SHA-256", 8);
 
// Get the current active file
let activeFile = app.workspace.getActiveFile();
 
// Ensure the active file is available
if (activeFile) {
    // Fetch the current note's content
    let fileContent = await app.vault.read(activeFile);
 
    // Use a regular expression to find all headers
    let headers = fileContent.match(/^#+\s.+/gm);
 
    // Display the headers with their SHA-256 hashes
    if (headers) {
        for (let header of headers) {
            let trimmedHeader = header.trim();
            let headerHash = await sha256Short(trimmedHeader, 8);
            dv.paragraph(`*${trimmedHeader}* [^${headerHash}] [^SHA-256]`);
        }
    } else {
        dv.paragraph("No headers found in this note.");
    }
} else {
    dv.paragraph("No active file found.");
}
 

^governing-principles-agreements-13748hdsi