Compare commits

...

21 Commits

Author SHA1 Message Date
QT
51940b63d5 Merge pull request 'Update docker-compose.prod.yml' (#10) from develop into main
Reviewed-on: #10
2026-02-06 17:11:18 +00:00
QT
bd9fdeb3d9 Update docker-compose.prod.yml
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
2026-02-06 17:11:02 +00:00
QT
442e19c46b Merge pull request 'Update docker-compose.prod.yml' (#9) from develop into main
Reviewed-on: #9
2026-02-06 17:02:10 +00:00
QT
6c633de22b Update docker-compose.prod.yml
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
2026-02-06 17:01:51 +00:00
QT
6968f7ce09 Merge pull request 'Update docker-compose.prod.yml' (#8) from develop into main
Reviewed-on: #8
2026-02-06 16:52:28 +00:00
QT
f64c59b9a1 Update docker-compose.prod.yml
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
2026-02-06 16:52:03 +00:00
QT
b6557f8869 Merge pull request 'Update docker-compose.prod.yml' (#7) from develop into main
Reviewed-on: #7
2026-02-06 15:48:34 +00:00
QT
a4adb4fb03 Update docker-compose.prod.yml
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
agregar network coolify
2026-02-06 15:47:48 +00:00
QT
f5b45ccdd9 Merge pull request 'Update docker-compose.prod.yml' (#6) from develop into main
Reviewed-on: #6
2026-02-06 14:21:47 +00:00
QT
985708e87a Update docker-compose.prod.yml
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
agregar worker
2026-02-06 14:21:29 +00:00
QT
e4fcc838f5 Merge pull request 'Update docker-compose.prod.yml' (#5) from qt-patch-1 into main
Reviewed-on: #5
2026-02-06 14:09:28 +00:00
QT
7a328841fa Update docker-compose.prod.yml 2026-02-06 14:08:11 +00:00
QT
f1fc3df416 Merge pull request 'Update docker-compose.prod.yml' (#4) from develop into main
Reviewed-on: #4
2026-02-06 13:46:19 +00:00
QT
01cef7a595 Update docker-compose.prod.yml
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
2026-02-06 13:35:13 +00:00
QT
62d1a8629a Merge pull request 'Update docker-compose.prod.yml' (#3) from develop into main
Reviewed-on: #3
2026-02-05 23:18:58 +00:00
QT
18ab1f6ae3 Merge branch 'main' into develop
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
2026-02-05 23:18:49 +00:00
QT
5ea3ac14e4 Update docker-compose.prod.yml
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
2026-02-05 23:16:27 +00:00
QT
84079df772 Merge pull request 'develop' (#1) from develop into main
Some checks failed
E2E / Test setup (push) Has been cancelled
E2E / Playwright tests (push) Has been cancelled
TypeCheck / TypeScript Type Check (push) Has been cancelled
Reviewed-on: #1
2026-02-05 23:10:08 +00:00
QT
28a8b0b5d1 Update docker-compose.prod.yml
Some checks failed
Build and Deploy Develop Docker Container / Build and deploy webapp container (push) Has been cancelled
Build and Deploy Develop Docker Container / Build and deploy server container (push) Has been cancelled
E2E / Test setup (pull_request) Has been cancelled
E2E / Playwright tests (pull_request) Has been cancelled
TypeCheck / TypeScript Type Check (pull_request) Has been cancelled
2026-02-05 23:01:31 +00:00
Ahmed Bouhuolia
2c05785096 Merge pull request #934 from bigcapitalhq/fix/branches-activation-bills
fix(server): branches activation not marking bills and payments with primary branch
2026-02-05 16:06:39 +02:00
Ahmed Bouhuolia
6af4be9c6c fix(server): branches activation not marking bills and payments with primary branch
When activating the multi-branches feature, existing bills, vendor credits,
and bill payments were not being marked with the default primary branch.

Changes:
- Add missing @Inject decorators to BillActivateBranches, VendorCreditActivateBranches,
  and BillPaymentsActivateBranches services
- Create BillBranchesActivateSubscriber to listen to onActivated event
- Create VendorCreditBranchesActivateSubscriber to listen to onActivated event
- Register BillPaymentsActivateBranches and PaymentMadeActivateBranchesSubscriber
  in BranchesModule
- Add branch object to BillResponseDto for API responses
- Add branch to BillTransformer includeAttributes

Fixes: #935
2026-02-05 16:03:57 +02:00
9 changed files with 105 additions and 19 deletions

View File

@@ -9,21 +9,21 @@ services:
- server
- webapp
ports:
- '${PUBLIC_PROXY_PORT:-80}:80'
- '${PUBLIC_PROXY_SSL_PORT:-443}:443'
- '8085:80'
- '8443:443'
tty: true
volumes:
- ./docker/envoy/envoy.yaml:/etc/envoy/envoy.yaml
restart: on-failure
networks:
- bigcapital_network
- coolify
webapp:
container_name: bigcapital-webapp
image: bigcapitalhq/webapp:latest
restart: on-failure
networks:
- bigcapital_network
- coolify
server:
container_name: bigcapital-server
@@ -38,7 +38,7 @@ services:
- redis
restart: on-failure
networks:
- bigcapital_network
- coolify
environment:
# Mail
- MAIL_HOST=${MAIL_HOST}
@@ -144,8 +144,8 @@ services:
depends_on:
- mysql
networks:
- bigcapital_network
- coolify
mysql:
container_name: bigcapital-mysql
restart: on-failure
@@ -158,10 +158,12 @@ services:
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
volumes:
- mysql:/var/lib/mysql
ports:
- '3335:3306'
expose:
- '3306'
networks:
- bigcapital_network
- coolify
redis:
container_name: bigcapital-redis
@@ -173,14 +175,14 @@ services:
volumes:
- redis:/data
networks:
- bigcapital_network
- coolify
gotenberg:
image: gotenberg/gotenberg:7
expose:
- '9000'
networks:
- bigcapital_network
- coolify
# Volumes
volumes:
@@ -194,5 +196,5 @@ volumes:
# Networks
networks:
bigcapital_network:
driver: bridge
coolify:
external: true

View File

@@ -1,6 +1,8 @@
import { ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
import { ItemEntryDto } from '@/modules/TransactionItemEntry/dto/ItemEntry.dto';
import { AttachmentLinkDto } from '@/modules/Attachments/dtos/Attachment.dto';
import { BranchResponseDto } from '@/modules/Branches/dtos/BranchResponse.dto';
import { DiscountType } from '@/common/types/Discount';
export class BillResponseDto {
@@ -89,6 +91,14 @@ export class BillResponseDto {
})
branchId?: number;
@ApiProperty({
description: 'Branch details',
type: () => BranchResponseDto,
required: false,
})
@Type(() => BranchResponseDto)
branch?: BranchResponseDto;
@ApiProperty({
description: 'The ID of the project',
example: 301,

View File

@@ -30,6 +30,7 @@ export class BillTransformer extends Transformer {
'taxes',
'entries',
'attachments',
'branch',
];
};

View File

@@ -31,6 +31,12 @@ import { ValidateBranchExistance } from './integrations/ValidateBranchExistance'
import { ManualJournalBranchesValidator } from './integrations/ManualJournals/ManualJournalsBranchesValidator';
import { CashflowTransactionsActivateBranches } from './integrations/Cashflow/CashflowActivateBranches';
import { ExpensesActivateBranches } from './integrations/Expense/ExpensesActivateBranches';
import { BillActivateBranches } from './integrations/Purchases/BillBranchesActivate';
import { VendorCreditActivateBranches } from './integrations/Purchases/VendorCreditBranchesActivate';
import { BillPaymentsActivateBranches } from './integrations/Purchases/PaymentMadeBranchesActivate';
import { BillBranchesActivateSubscriber } from './subscribers/Activate/BillBranchesActivateSubscriber';
import { VendorCreditBranchesActivateSubscriber } from './subscribers/Activate/VendorCreditBranchesActivateSubscriber';
import { PaymentMadeActivateBranchesSubscriber } from './subscribers/Activate/PaymentMadeBranchesActivateSubscriber';
import { FeaturesModule } from '../Features/Features.module';
@Module({
@@ -66,7 +72,13 @@ import { FeaturesModule } from '../Features/Features.module';
ValidateBranchExistance,
ManualJournalBranchesValidator,
CashflowTransactionsActivateBranches,
ExpensesActivateBranches
ExpensesActivateBranches,
BillActivateBranches,
VendorCreditActivateBranches,
BillPaymentsActivateBranches,
BillBranchesActivateSubscriber,
VendorCreditBranchesActivateSubscriber,
PaymentMadeActivateBranchesSubscriber
],
exports: [
BranchesSettingsService,

View File

@@ -1,11 +1,14 @@
import { Knex } from 'knex';
import { Injectable } from '@nestjs/common';
import { Inject, Injectable } from '@nestjs/common';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
import { Bill } from '@/modules/Bills/models/Bill';
@Injectable()
export class BillActivateBranches {
constructor(private readonly billModel: TenantModelProxy<typeof Bill>) {}
constructor(
@Inject(Bill.name)
private readonly billModel: TenantModelProxy<typeof Bill>,
) {}
/**
* Updates all bills transactions with the primary branch.
@@ -17,7 +20,7 @@ export class BillActivateBranches {
primaryBranchId: number,
trx?: Knex.Transaction,
) => {
// Updates the sale invoice with primary branch.
await Bill.query(trx).update({ branchId: primaryBranchId });
// Updates the bills with primary branch.
await this.billModel().query(trx).update({ branchId: primaryBranchId });
};
}

View File

@@ -1,11 +1,12 @@
import { Knex } from 'knex';
import { Inject, Injectable } from '@nestjs/common';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
import { BillPayment } from '@/modules/BillPayments/models/BillPayment';
import { Injectable } from '@nestjs/common';
@Injectable()
export class BillPaymentsActivateBranches {
constructor(
@Inject(BillPayment.name)
private readonly billPaymentModel: TenantModelProxy<typeof BillPayment>,
) {}

View File

@@ -1,11 +1,12 @@
import { Knex } from 'knex';
import { Injectable } from '@nestjs/common';
import { Inject, Injectable } from '@nestjs/common';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
import { VendorCredit } from '@/modules/VendorCredit/models/VendorCredit';
@Injectable()
export class VendorCreditActivateBranches {
constructor(
@Inject(VendorCredit.name)
private readonly vendorCreditModel: TenantModelProxy<typeof VendorCredit>,
) {}

View File

@@ -0,0 +1,28 @@
import { IBranchesActivatedPayload } from '../../Branches.types';
import { events } from '@/common/events/events';
import { Injectable } from '@nestjs/common';
import { BillActivateBranches } from '../../integrations/Purchases/BillBranchesActivate';
import { OnEvent } from '@nestjs/event-emitter';
@Injectable()
export class BillBranchesActivateSubscriber {
constructor(
private readonly billActivateBranches: BillActivateBranches,
) { }
/**
* Updates bills transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
@OnEvent(events.branch.onActivated)
async updateBillsWithBranchOnActivated({
primaryBranch,
trx,
}: IBranchesActivatedPayload) {
await this.billActivateBranches.updateBillsWithBranch(
primaryBranch.id,
trx,
);
}
}

View File

@@ -0,0 +1,28 @@
import { IBranchesActivatedPayload } from '../../Branches.types';
import { events } from '@/common/events/events';
import { Injectable } from '@nestjs/common';
import { VendorCreditActivateBranches } from '../../integrations/Purchases/VendorCreditBranchesActivate';
import { OnEvent } from '@nestjs/event-emitter';
@Injectable()
export class VendorCreditBranchesActivateSubscriber {
constructor(
private readonly vendorCreditActivateBranches: VendorCreditActivateBranches,
) { }
/**
* Updates vendor credits transactions with the primary branch once
* the multi-branches is activated.
* @param {IBranchesActivatedPayload}
*/
@OnEvent(events.branch.onActivated)
async updateVendorCreditsWithBranchOnActivated({
primaryBranch,
trx,
}: IBranchesActivatedPayload) {
await this.vendorCreditActivateBranches.updateVendorCreditsWithBranch(
primaryBranch.id,
trx,
);
}
}