import sql from "mssql"; import { SQLInput } from "../types/sql-input-param.js"; import { SQLTransactionOperation } from "./sql-transaction-manager.js"; /** * Insert a new labor ticket into the database. * Create a query named laborTicketsInsert in the sql_toERP folder, add its inputs to the SQLInput array * The laborTicketsInsert query is expected to return the NewRowUniqueId of the inserted labor ticket * * @param transaction The SQL transaction object * @param inputs The SQL input parameters * @returns The NewRowUniqueId of the inserted labor ticket */ export class SQLLaborTicketInsertOperation implements SQLTransactionOperation { constructor(private readonly sqlQuery: string) {} async execute( transaction: sql.Transaction, inputs: SQLInput[] ): Promise { const request = transaction.request(); inputs.forEach((input) => { request.input(input.name, input.type, input.value); }); const result = await request.query(this.sqlQuery); if (!result.recordset[0].NewRowUniqueId) { throw new Error( "No LaborTicketId generated by the labor ticket insert query: " + JSON.stringify(request.parameters, null, 2) ); } return result.recordset[0].NewRowUniqueId; } } /** * Update an existing labor ticket in the database. * Create a query named laborTicketsUpdate in the sql_toERP folder, add its inputs to the SQLInput array * * @param transaction The SQL transaction object * @param inputs The SQL input parameters * @returns The number of rows affected */ export class SQLLaborTicketUpdateOperation implements SQLTransactionOperation { constructor(private readonly sqlQuery: string) {} async execute( transaction: sql.Transaction, inputs: SQLInput[] ): Promise { const request = transaction.request(); inputs.forEach((input) => { request.input(input.name, input.type, input.value); }); const result = await request.query(this.sqlQuery); return result.rowsAffected[0]; } }