fix(server): mark compute inventory cost flag

This commit is contained in:
Ahmed Bouhuolia
2026-01-25 21:59:44 +02:00
parent f461cc221b
commit 421f0c26a7
5 changed files with 40 additions and 19 deletions

View File

@@ -4,14 +4,15 @@ import { TenancyContext } from '@/modules/Tenancy/TenancyContext.service';
import { TableSheetPdf } from './TableSheetPdf'; import { TableSheetPdf } from './TableSheetPdf';
import { TemplateInjectableModule } from '@/modules/TemplateInjectable/TemplateInjectable.module'; import { TemplateInjectableModule } from '@/modules/TemplateInjectable/TemplateInjectable.module';
import { ChromiumlyTenancyModule } from '@/modules/ChromiumlyTenancy/ChromiumlyTenancy.module'; import { ChromiumlyTenancyModule } from '@/modules/ChromiumlyTenancy/ChromiumlyTenancy.module';
import { InventoryCostModule } from '@/modules/InventoryCost/InventoryCost.module';
@Module({ @Module({
imports: [TemplateInjectableModule, ChromiumlyTenancyModule], imports: [
providers: [ TemplateInjectableModule,
FinancialSheetMeta, ChromiumlyTenancyModule,
TenancyContext, InventoryCostModule,
TableSheetPdf,
], ],
providers: [FinancialSheetMeta, TenancyContext, TableSheetPdf],
exports: [FinancialSheetMeta, TableSheetPdf], exports: [FinancialSheetMeta, TableSheetPdf],
}) })
export class FinancialSheetCommonModule {} export class FinancialSheetCommonModule {}

View File

@@ -1,10 +1,14 @@
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { IFinancialSheetCommonMeta } from '../types/Report.types'; import { IFinancialSheetCommonMeta } from '../types/Report.types';
import { TenancyContext } from '@/modules/Tenancy/TenancyContext.service'; import { TenancyContext } from '@/modules/Tenancy/TenancyContext.service';
import { InventoryComputeCostService } from '@/modules/InventoryCost/commands/InventoryComputeCost.service';
@Injectable() @Injectable()
export class FinancialSheetMeta { export class FinancialSheetMeta {
constructor(private readonly tenancyContext: TenancyContext) {} constructor(
private readonly tenancyContext: TenancyContext,
private readonly inventoryComputeCostService: InventoryComputeCostService,
) {}
/** /**
* Retrieves the common meta data of the financial sheet. * Retrieves the common meta data of the financial sheet.
@@ -17,10 +21,8 @@ export class FinancialSheetMeta {
const baseCurrency = tenantMetadata.baseCurrency; const baseCurrency = tenantMetadata.baseCurrency;
const dateFormat = tenantMetadata.dateFormat; const dateFormat = tenantMetadata.dateFormat;
// const isCostComputeRunning = const isCostComputeRunning =
// this.inventoryService.isItemsCostComputeRunning(); await this.inventoryComputeCostService.isItemsCostComputeRunning();
const isCostComputeRunning = false;
return { return {
organizationName, organizationName,

View File

@@ -68,6 +68,12 @@ export class ComputeItemCostProcessor extends WorkerHost {
} catch (error) { } catch (error) {
console.error(`[error] Error computing item cost for item ${itemId}:`, error); console.error(`[error] Error computing item cost for item ${itemId}:`, error);
console.error('Error stack:', error instanceof Error ? error.stack : 'No stack trace'); console.error('Error stack:', error instanceof Error ? error.stack : 'No stack trace');
// Reset cost_compute_running when job fails so it does not stay true indefinitely
try {
await this.inventoryComputeCostService.markItemsCostComputeRunning(false);
} catch (markError) {
console.error('[error] Failed to mark cost compute as not running:', markError);
}
throw error; throw error;
} }
} }

View File

@@ -114,7 +114,6 @@ export class SaleInvoicesCost {
*/ */
scheduleWriteJournalEntries(startingDate?: Date) { scheduleWriteJournalEntries(startingDate?: Date) {
// const agenda = Container.get('agenda'); // const agenda = Container.get('agenda');
// return agenda.schedule('in 3 seconds', 'rewrite-invoices-journal-entries', { // return agenda.schedule('in 3 seconds', 'rewrite-invoices-journal-entries', {
// startingDate, // startingDate,
// tenantId, // tenantId,
@@ -123,12 +122,11 @@ export class SaleInvoicesCost {
/** /**
* Writes cost GL entries from the inventory cost lots. * Writes cost GL entries from the inventory cost lots.
* @param {number} tenantId - * @param {Date} startingDate - Starting date.
* @param {Date} startingDate -
* @returns {Promise<void>} * @returns {Promise<void>}
*/ */
public writeCostLotsGLEntries = (startingDate: Date) => { public writeCostLotsGLEntries = async (startingDate: Date) => {
return this.uow.withTransaction(async (trx: Knex.Transaction) => { await this.uow.withTransaction(async (trx: Knex.Transaction) => {
// Triggers event `onInventoryCostLotsGLEntriesBeforeWrite`. // Triggers event `onInventoryCostLotsGLEntriesBeforeWrite`.
await this.eventPublisher.emitAsync( await this.eventPublisher.emitAsync(
events.inventory.onCostLotsGLEntriesBeforeWrite, events.inventory.onCostLotsGLEntriesBeforeWrite,
@@ -146,5 +144,10 @@ export class SaleInvoicesCost {
} as IInventoryCostLotsGLEntriesWriteEvent, } as IInventoryCostLotsGLEntriesWriteEvent,
); );
}); });
// Signal that cost entries have been written so cost_compute_running can be set to false.
await this.eventPublisher.emitAsync(
events.inventory.onInventoryCostEntriesWritten,
{},
);
}; };
} }

View File

@@ -18,12 +18,21 @@ export default function FinancialReportPage(props) {
} }
export const FinancialComputeAlert = styled.div` export const FinancialComputeAlert = styled.div`
--x-background-color: #fdecda;
--x-text-color: #342515;
--x-button-text-color: #824400;
.bp4-dark & {
--x-background-color: rgba(200, 118, 25, 0.2);
--x-text-color: rgba(255, 255, 255, 0.8);
--x-button-text-color: rgba(255, 255, 255, 0.8);
}
position: relative; position: relative;
padding: 8px 20px; padding: 8px 20px;
border-radius: 2px; border-radius: 2px;
color: #342515; background-color: var(--x-background-color);
color: var(--x-text-color);
font-size: 13px; font-size: 13px;
background-color: var(--color-financial-report-background);
button { button {
font-size: 12px; font-size: 12px;
@@ -32,7 +41,7 @@ export const FinancialComputeAlert = styled.div`
&, &,
&:hover { &:hover {
color: #824400; color: var(--x-button-text-color);
text-decoration: underline; text-decoration: underline;
} }
} }
@@ -40,7 +49,7 @@ export const FinancialComputeAlert = styled.div`
margin-right: 6px; margin-right: 6px;
position: relative; position: relative;
top: -2px; top: -2px;
fill: #975f19; fill: var(--x-text-color);
} }
`; `;